Python爬虫【四】静态网页爬虫2-反爬虫

1、反爬虫

反爬虫是网站限制爬虫的一种策略。它并不是禁止爬虫(完全禁止爬虫几乎不可能,也可能误伤正常用户),而是限制爬虫,让爬虫在网站可接受的范围内爬取数据,不至于导致网站瘫痪无法运行。

常见的反爬虫方式有 判别身份 和 IP限制 两种

2、判别身份

浏览器爬虫访问网站时都会带上一些信息用于身份识别,这些信息都被存储在一个叫请求头(Request Headers)的地方。

查看请求头的步骤:

(1)点击Network标签(里面记录了所有网络请求) (2)点击第一个请求 (3)找到Request Headers(请求头) (4)找到user-agent(用户代理)字段

user-agent 里包含了操作系统、浏览器类型、版本等信息,通过修改它我们就能成功地伪装成浏览器。

定制请求头:只需定义一个字典(请求头字段作为键,字段内容作为值)传递给header参数即可。

import requests

# 从浏览器中复制粘贴的请求头
headers = {
  user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36
}
res = requests.get(https://www.zhihu.com/explore, headers=headers)

3、IP限制

即使改了 user-agent 伪装成了浏览器,但如果访问过于频繁,也还是会被识别为爬虫,并限制你的 IP 访问该网站。所以,我们常常使用 time.sleep() 来降低访问的频率,也可以使用代理解决IP限制。代理的意思是通过别的 IP 访问网站。

代理:和 headers 一样,也是定义一个字典,作为 proxies 参数传递给 requests.get() 方法,字典的键是 http 和 https 这两种协议,值为对应的 IP 代理。

import requests

headers = {
  “http”: "http://10.10.10.10:8888",
  "https": "htpps://10.10.10.10:8889",
}
res = requests.get(https://www.zhihu.com/explore, headers=headers)

4、robots.txt

robots.txt ——爬虫中的君子协议,是一种存放于网站根目录下的文本文件,用于告诉爬虫此网站中的哪些内容是不应被爬取的,哪些是可以被爬取的,但并不能真的禁止你爬取。

在网站域名后加上/robots.txt即可查看,如豆瓣读书:https://book.douban.com/robots.txt

5、查询字符串

如:https://book.douban.com/top250**?start=25** ? 前面是网页的地址,后面是查询字符串。查询字符串作为用于搜索的参数或处理的数据传送给服务器处理,格式是 ?key1=value1&key2=value2,通过 & 分隔多个键值对。如 ?a=1&b=2 表示:a的值为1,b的值为2。

经验分享 程序员 微信小程序 职场和发展