Python学习之爬虫08-用户代理池构建
概念:
用户代理概念:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
详情见百度百科-用户代理
理解:这个就是之前使用的浏览器代理…一下换了个名字害的差点没理解过来。
用户代理池:将不同的用户代理组建成为一个池子,随后随机调用。
理解:念起来有点绕,其实就是将多个User Agent放到一组中,然后随机的从这一组里调用一个User Agent。
练习:
还是爬糗事百科吧。
import urllib
import re
import random
uapools=[
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201", # QQ浏览器极速模式
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36", # 谷歌
"Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12", # 遨游
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0" # 火狐
]
# 建立用户代理池,随机调用 User-Agent(用户代理)
def ua(uapools):
thisua=random.choice(uapools)
print(thisua)
# 添加报头并将报头安装为全局属性
headers=("User-Agent",thisua)
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)
pat='<div class="content">.*?<span>(.*?)</span>.*?</div>'
fh=open("G:\\Python_Test\\qiushibaike\\qiushibaike1.txt","a+",encoding="utf-8")
for i in range(10,20):
# 调用用户代理池
ua(uapools)
url="https://www.qiushibaike.com/text/page/"+str(i)+"/"
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
#print(data)
rst=re.compile(pat,re.S).findall(data) # re.S为模式修正符,使得 .可以匹配换行符
for j in range(0,len(rst)):
fh.write(rst[j])
print("当前(第"+str(i)+"页)爬取成功!")
fh.close()
anaconda有时候不知道为什么卡死了,导致最后的文件写入没有关闭,文件大小为 0 KB,但是打开却又有值,这个有人遇到过吗?