Python学习之爬虫08-用户代理池构建

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,但是打开却又有值,这个有人遇到过吗?

猜你喜欢

转载自blog.csdn.net/xxydzyr/article/details/86665578
今日推荐