本文主要讲使用IP代理防止爬虫被禁
在 python爬虫中爬取到大约184条数据后,zhipin网站就会采取链接重定向方式 阻止爬取。如果在代码中取消登录操作 , 直接爬取到大约92条数据,你的 IP 就会被封啦~
为了防止这个悲剧发生 根据Scarpy https://doc.scrapy.org/en/latest/topics/practices.html?highlight=banned#avoiding-getting-banned 有以下几个建议:
- 动态设置user agent
- 禁用cookies (COOKIES_ENABLED)
- 设置延迟下载 (DOWNLOAD_DELAY)
- 使用Google cache (国内不好用)
- 使用IP地址池(Tor project、VPN和代理IP)
- 使用Crawlera (收费)
在setting.py中设置完 COOKIES_ENABLED 和 DOWNLOAD_DELAY 下面就来看如何使用 User Agent 和 IP代理
设置 UA池和 IP池
scarpy设置代理IP 和 User Agent的切换都是用 下载中间件 DOWNLOADER_MIDDLEWARES 完成。
动态切换 User Agent
在工程中 middleware.py(没有这个文件就创建一个,若是有这个文件 里面有内置的中间件也不用理会它) 中添加:
1 | import random |
然后在setting.py中 添加:
1 | DOWNLOADER_MIDDLEWARES = { |
IP代理
简单来,比如本地127.0.0.1开启了一个8888端口的代理,同样可以通过中间件配置让爬虫通过这个代理来对目标网站进行爬取。
同样在middleware.py中加入:
1 | class ProxyMiddleware(object): |
然后和 user agent中一样 在setting.py 的DOWNLOADER_MIDDLEWARES中添加ProxyMiddleware就可以了。
但是当然用第三方的ip代理 才能达到防止爬虫被banned的目的啦~