Scrapy应对反爬虫策略

一、设置用户代理

设置User Agent模拟浏览器,在Scrapy框架中,有四种方法设置User Agent。
1、在settings.py中·直接设置User Agent。
2、在settings.py中设置Scrapy的默认请求headers。
3、直接在爬虫代码中为scrapy.Request添加headers参数。
4、在中间件自定义headers。
设置随机用户代理和ip代理都需要用到Scrapy下载器中间件。Scrapy所发出的请求(request)和请求响应(response)都会经过下载器中间件。所以,要修改request和response,就可以通过下载器中间件修改。下载器中间件**DOWNLOADER_MIDDLEWARES 。
二、设置下载延迟、Cookies及使用代理ip

1、设置下载延迟
在settings.py中找到#DOWNLOAD_DELAY = 3,去掉注释。DOWNLOAD_DELAY = 3表示下载延时设置为3秒,DOWNLOAD_DELAY支持设置小数。Scrapy在设置了DOWNLOAD_DELAY的情况下,默认启用RANDOMIZE_DOWNLOAD_DELAY(随机等待)。这样当从相同的网站获取数据时,Scrapy将会等待一个随机的值(0.5-1.5间的一个书记值乘以DOWNLOAD_DELAY)。该随机值降低了爬虫被检测的概率。

设置DOWNLOAD_DELAY的问题,它是一个固定的下载延时,一班不知道设置几秒合适,这时我们可以设置自动限速。设置方法:在settings.py中找到AUTOTHROTTLE_ENABLED = True,将注释去掉。

2、Cookies
cookies指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据。浏览器在访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后再判断用户是否是登录状态,然后返回对应的响应。在爬虫中,有时候处理需要登录才能访问的页面时,我们一般会直接将登录成功后获取的Cookies放在请求头里面直接请求,而不必重新模拟登录Session是把用户的数据写在用户的独占session上,存储在服务器上,一般只将session的id存储在cookie中。
在一个网站登录之后,按F12就能检查网页,然后找到cookies。
Scrapy应对反爬虫策略
3、代理ip
做网络爬虫时,一般对代理IP的需求量比较大。因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制。这样我们在爬取网站时就需要很多代理IP。

三、设置随机用户代理
·1、在settings.py中添加一批列表形式的User Agent(可以网上百度)
Scrapy应对反爬虫策略2、在middlewares.py中编写随机User Agent中间件,重写一个UserAgentMiddleware类,并重写process_request方法。

3、编写中间件,导入需要的包,将定义的User Agent列表从settings.py文件中引进来。
Scrapy应对反爬虫策略

4、middlewares.py中定义随机User Agent类,并重写process_request方法。
Scrapy应对反爬虫策略
5、打开setting.py,关闭Scrapy默认的User Agent中间件,并启用自己定义的中间件。
中间件的执行顺序,鼻血是0-1000的整数值。
Scrapy应对反爬虫策略
6、在settings.py中写入代理ip列表(新增加),列表中的元素是字典。
Scrapy应对反爬虫策略
7、进入middlewares.py文件,编写随机更换代理ip的类。
Scrapy应对反爬虫策略
8、在setting.py文件中启用我们定义的类,并关闭Scrpy内置的HttpProxyMiddleware。
Scrapy应对反爬虫策略