一、参考资料

《Python爬虫教程入门到精通》

二、反爬虫与反反爬虫

1.user-agent

参考资料Python爬虫入门教程:超级简单的Python爬虫教程
反爬虫:服务器通过检查连接的user-agent判断是用户还是代码。超过某阈值的时候就会发验证码,没有验证就封杀。
反反爬虫

  • 打开浏览器复制user-agent至代码中,模仿浏览器访问,但是要注意设置访问速度,过快也会被封;

    image.png headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; Win64; x64) ………. Safari/537.36’}
    response = request.get(url,headers=headers) 设置延时防止被封: import time
    time.sleep(3)

  • 构建user-agent代理池,随机使用里面的代理。(此处介绍使用第三方模块的,也可自己找几个UA然后构成list)

    安装第三方工具:pip install fake-useragent 代码: from fake_useragent import UserAgent

    实例化一个对象

    ua=UserAgent()

    随机获取一个ie浏览器ua

    print(ua.ie)

    随机获取一个火狐浏览器ua

    print(ua.firefox)

    随机获取一个谷歌浏览器ua

    print(ua.chrome) 运行结果: image.png

    随机获取一个ua

    print(ua.random) 运行结果: image.png

此处使用自己找的几个UA然后构成list headers={‘User-Agent’:random.choice(ua_list)}

2.代理IP池

参考资料
代理IP-proxies参数
反爬虫
针对 IP 地址设置的反爬虫。比如,访问网站超过规定次数导致流量异常,或者某个时间段内频繁地更换浏览器访问,存在上述行为的 IP 极有可能被网站封杀掉。
反反爬虫
代理 IP :使用IP池中的第三方IP代替自己去访问网站。突破了 IP 地址的访问限制,隐藏了本地网络的真实IP。不过可通过端口探测等技术识辨别。

输出结果:

{
“args”: {},
“headers”: {
“Accept”: “/“,
“Accept-Encoding”: “gzip, deflate”,
“Cache-Control”: “max-age=259200”,
“Host”: “httpbin.org”,
“User-Agent”: “Mozilla/5.0”,
“X-Amzn-Trace-Id”: “Root=1-605073b0-4f54db1b2d2cfc0c074a1193” },

注意此处显示两个IP,第一个是你自己的真实IP,另外一个是对外展示的IP “origin”: “121.17.25.194, 191.235.72.144”,

“url”: “http://httpbin.org/get“ }

使用网上收费的代理IP,具体见以前笔记:《使用代理访问网站》

三、 提高抓取效率

1.网页超时规则

参考资料:
提高抓取效率
为了提高网页信息的抓取质量,减小网络波动带来的响应,我们可以设置一个规则:
在超时时间内(3秒),在该时间内对于请求失败的页面尝试请求三次,如果均未成功,则抓取下一个页面。

requests.get() 方法提供了 timeout 参数可以用来设置超时时间,此方法还提供了其他实用性参数,比如 auth(用户认证)、veryify(证书认证)、proxies(设置代理 IP),这在后续内容中会做相应介绍。

随机取一个UA

def get_header(self):

实例化ua对象

ua=UserAgent() headers={‘User-Agent’:ua.random} return headers

发送请求

def get_html(self,url):

在超时间内,对于失败页面尝试请求三次

if self.blog<=3: try: res=requests.get(url=url,headers=self.get_header(),timeout=3) html=res.text return html except Exception as e: print(e) self.blog+=1 self.get_html(url)

2.设置休息时间

time.sleep(random.randint(1,3))