爬虫时会遇到的那些事
爬虫被反爬封锁
原因
同一个IP大规模地、长时间地获取数据,会被服务器发现后进行封锁等一系列操作,导致无法获取爬虫数据。
解决方案
1.user_agent伪装和轮换
因为不同浏览器的不同版本都有不同的user_agent,因此在选择user_agent时,不要一直使用一个user_agent,而是在多个user_agent中随机使用其中一个。
下面提供一个user_agent列表
https://blog.csdn.net/qq_43612275/article/details/86696137
具体操作方法见下
headers = {
'User-Agent': agent[random.randint(0, len(agent) - 1)]
}
2.使用代理ip和代理服务器
检查访问ip也是反爬机制的一个防御手段,你如果有多个公网ip,可以换着使用,不要一直使用一个,或者就去使用代理服务器,博主目前没有用过代理服务器,就不在这里介绍了。
3.设置一个访问间隔
因为如果你一直无间断的访问的话,对面服务器承受巨大压力的同时也会寻找压力产生的原因,这个时候你可能就会被当成"间谍"抓住0.0。因此如果你没有很特殊的需求的话,可以每隔一段时间爬取一次,最好设置一个随机的间隔时间,这样我们才能伪装的更好。
因为博主的爬虫任务需要一个时间间隔,所以后续也会更新如何设置间隔时间的内容,敬请关注。
4.使用session机制
因为cookie会保存客户端的相关状态,在爬虫中如果遇到了cookie的反爬就可以使用session机制。
因为requests.session对象和requests模块用法几乎一致.如果在请求的过程中产生了cookie,如果该请求使用session发起的,则cookie会被自动存储到session中。
用法就很简单了,将我们的requests.get()改为requests.session.get()
# requests.get(main_url, headers=headers)
# 改为
requests.Session().get(main_url, headers=headers)
在以后遇到了其他爬虫问题,也会在这里继续更新,敬请期待。