Python爬虫—一篇文章教你常见反爬虫机制与应对方法

文章目录

    • header检验
    • User-Agent
    • Referer
    • Cookies
    • X-Forwarded-For
    • 访问频率限制
    • 限制IP的请求数量

        爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史。而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页上的数据被爬虫爬走。然而,如果反爬机制过于严格,可能会误伤到真正的用户请求;如果既要和爬虫死磕,又要保证很低的误伤率,那么又会加大研发的成本。
        简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作。而伪装度高的爬虫爬取速度慢,对服务器造成的负担也相对较小。所以,网站反爬的重点也是那种简单粗暴的爬虫,反爬机制也会允许伪装度高的爬虫,获得数据。毕竟伪装度很高的爬虫与真实用户也就没有太大差别了。

header检验

        最简单的反爬机制,就是检查 HTTP 请求的 Headers信息,包括 User-Agent, Referer、Cookies 等。

User-Agent

        当我们使用浏览器访问网站的时候,浏览器会发送一小段信息给网站,我们称为Request Headers,在这个头部信息里面包含了本次访问的一些信息,例如编码方式,当前地址,将要访问的地址等等。这些信息一般来说是不必要的,但是现在很多网站会把这些信息利用起来。其中最常被用到的一个信息,叫做“User-Agent”。网站可以通过User-Agent来判断用户是使用什么浏览器访问。

我们以猫眼电影为例,下图是没有User-Agent的情况:
Python爬虫—一篇文章教你常见反爬虫机制与应对方法_第1张图片
有User-Agent的情况:
Python爬虫—一篇文章教你常见反爬虫机制与应对方法_第2张图片
那么我们如何获取网站的User-Agent呢?请打开Chrome,打开任意一个网站(以CSDN为例),然后F12,定位到 “Network” 选项卡,并刷新网页,如下图所示:
Python爬虫—一篇文章教你常见反爬虫机制与应对方法_第3张图片
当然,我们也可以使用fake_useragent第三方库,来实现随机请求头的设置
安装:

pip install fake-useragent

用法:
Python爬虫—一篇文章教你常见反爬虫机制与应对方法_第4张图片
卸载:

pip install -U fake-useragent

Referer

        Referer 是检查此请求由哪里来,通常可以做图片的盗链判断。在 Scrapy 中,如果某个页面 url 是通过之前爬取的页面提取到,Scrapy 会自动把之前爬取的页面 url 作为 Referfer。也可以通过上面的方式自己定义 Referfer 字段。

Cookies

        网站可能会检测Cookie中session_id的使用次数,如果超过限制,就触发反爬策略。所以可以在Scrapy中设置 COOKIES_ENABLED = False 让请求不带Cookies。

        也有网站强制开启Cookis,这时就要麻烦一点了。可以另写一个简单的爬虫,定时向目标网站发送不带Cookies的请求,提取响应中Set-cookie字段信息并保存。爬取网页时,把存储起来的Cookies带入Headers中。

X-Forwarded-For

        在请求头中添加 X-Forwarded-For 字段,将自己申明为一个透明的代理服务器,一些网站对代理服务器会手软一些。

X-Forwarded-For 头一般格式如下:

X-Forwarded-For: client1, proxy1, proxy2

这里将 client1,proxy1 设置为随机 IP 地址,把自己的请求伪装成代理的随机 IP 产生的请求。然而由于 X-Forwarded-For 可以随意篡改,很多网站并不会信任这个值。不过这种情况我们现在已经极少会遇到了,因为这种办法根本没有任何的防御能力。

访问频率限制

        我们访问一些网站,由于一些网站的访问时间设置,我们是不能快速进入下一页的,这个时候,我们需要修改他的访问时间,在它访问下一页的时候,通过 POST 方式,修改 read_time,正常访问的话,这个值一般会大于10如果我们修改成 60,于是轻轻松松的通过了它的反爬虫策略。

限制IP的请求数量

        如果某一IP的请求速度过快,就触发反爬机制。当然可以通过放慢爬取速度绕过,这要以爬取时间大大增长为代价。另一种方法就是添加代理,代理IP访问可以解决这个问题,如果用100个代理IP访问100个页面,可以给网站造成一种有100个人,每个人访问了1页的错觉,这样自然而然就不会限制你的访问了。
Python爬虫—一篇文章教你常见反爬虫机制与应对方法_第5张图片

你可能感兴趣的:(Python爬虫—一篇文章教你常见反爬虫机制与应对方法)