如何解决爬虫ip被封的问题

如何解决爬虫ip被封的问题,第1张

爬虫是一种按照一定规则,自动抓取网络数据的程序或脚本,它能够快速实现抓取、整理任务,大大节省时间成本。因为爬虫的频繁抓取,会对服务器造成巨大负载,服务器为了保护自己,自然要作出一定的限制,也就是我们常说的反爬虫策略,来阻止爬虫的继续采集。
如何防止ip被限制
1对请求Headers进行限制
这应该是最常见的,最基本的反爬虫手段,主要是初步判断你是不是真实的浏览器在 *** 作。
这个一般很好解决,把浏览器中的Headers信息复制上去就OK了。
特别注意的是,很多网站只需要userAgent信息就可以通过,但是有的网站还需要验证一些其他的信息,例如知乎,有一些页面还需要authorization的信息。所以需要加哪些Headers,还需要尝试,可能还需要Referer、Accept-encoding等信息。
2对请求IP进行限制
有时我们的爬虫在爬着,突然冒出页面无法打开、403禁止访问错误,很有可能是IP地址被网站封禁,不再接受你的任何请求。
3对请求cookie进行限制
当爬虫遇到登陆不了、没法保持登录状态情况,请检查你的cookie很有可能是你爬虫的cookie被发现了。
以上便是关于反爬虫策略,对于这几个方面,爬虫要做好应对的方法,不同的网站其防御也是不同的。

互联网中使用人员日益的增加,这是因为越来越多的工作需要借助来进行完成。限制很多的工作需要使用到网络数据,数据的采集就要使用到,就是所谓的爬虫代理,有爬虫就会有反爬虫,通过反爬虫来限制爬虫,当我们的本地ip被封后就不能进行工作。要采用很多的爬虫编写或者经常地更换ip地址,这类互联网技术工作程序流程所应用到爬虫代理技术性的机遇有很多。那么数据抓取被封ip应该怎样进行处理?
1、IP是爬虫工作的必需,使用免费可以处理一定的ip被限制问题。但是免费的使用会浪费大量的时间,不具有稳定性。
2、反爬虫一般是在要求时间内IP浏览频次开展的限定,在进行爬虫低时候进行时间段的设置,防止封号。尽可能的多更换不同的ip进行使用。
3、尽管大多数网址都是有反爬虫,但有一些网址对这便捷较为忽视,我们可以使用进行ip地址的隐藏,多更换,在反爬虫发现我们是爬虫的时候就及时的更换ip,可以稳定工作,同时可以维护我们本地ip的安全。
爬虫是工作中必不可少的工具,在选择时,要选择适合自己工作需求的,才能更好地进行工作。

在数据收集方面而言,爬虫想要采集数据,前提条件要能突破网站的反爬虫机制,接着还能预防网站封IP,这样的才可以高效地进行工作。爬虫怎样防网站封IP
1多线程采集
采集数据,都想尽量快的采集更多的数据,要不然大量的工作还一条一条采集,太耗时间了。
比如,几秒钟采集一次,这样一分钟能够采集10次左右,一天可以采集一万多的页面。如果是小型网站还好,但大型网站上千万的网页应该怎么办,按照这个速度采集需要耗大量的时间。
建议采集大批量的数据,可以使用多线程,它可以同步进行多项任务,每个线程采集不同的任务,提高采集数量。
2时间间隔访问
对于多少时间间隔进行采集,可以先测试目标网站所允许的最大访问频率,越贴近最大访问频率,越容易被封IP,这就需要设置一个合理的时间间隔,既能满足采集速度,也可以不被限制IP。
3高匿名代理
需要突破网站的反爬虫机制,需要使用代理IP,使用换IP的方法进行多次访问。采用多线程,也需要大量的IP,另外使用高匿名代理,要不然会被目标网站检测到你使用了代理IP,另外透露了你的真实IP,这样的肯定会封IP。假若使用高匿名代理就可以避免被封ip。
上文介绍了需要大量采集数据的情况下,爬虫怎样防网站封IP的方法,即使用多线程采集,并用高匿名代理进行辅助,还需要调节爬虫访问的速度,这样的大幅度降低网站封IP的几率。

简单来讲,你通过代码向服务器发送的请求与浏览器向服务器发送的请求不一样,所以你可以通过浏览器获取数据,但是无法通过代码。

首先建议你打开浏览器的开发者工具,推荐使用Chrome浏览器。选中Network一栏之后重新通过浏览器向服务器发送一次请求,然后,你就可以看到你刚才通过浏览器访问服务器资源的流程和数据流向。其中,数据流向包括:

浏览器向服务器发送的请求头

浏览器向服务器发送的请求体

(可能)服务器向浏览器发送的重定向地址及浏览器重新向新的地址发送请求

服务器返回的响应头

服务器返回的响应体

---
你面临的问题很可能是在模拟浏览器发送请求这一步(1、2)。检查代码,修复之。

至于解决方案,既然你可以通过浏览器访问,说明你的IP并没有被服务器禁封,加上你提到用了requests库,我猜测你通过requestsSession()来获取了一个对象或者指定了headers中的Cookie字段来发送请求。这两种方法,服务器都会认为你的多次请求来自同一个客户端,自然访问过快之后,服务器会向此客户端d验证码(服务器端通过Session确认某一个用户,客户端通过Cookie[中的某一条]告诉服务器自己是某Session对应的用户)。

所以,你可以尝试切换一个新的requestsSession()对象来发送请求。更甚之,你可以通过代理IP,使用代理IP需要注意的是,最好选择高匿的IP,并在使用前校验有效性。通过requests使用代理:

import requests
proxies = {
 "",
 "",
}
requestsget(")

1IP必须需要,,ADSL。如果有条件,其实可以跟机房多申请外网IP。
2在有外网IP的机器上,部署代理服务器。
3你的程序,使用轮训替换代理服务器来访问想要采集的网站。
好处:
1程序逻辑变化小,只需要代理功能。
2根据对方网站屏蔽规则不同,你只需要添加更多的代理就行了。
3就算具体IP被屏蔽了,你可以直接把代理服务器下线就OK,程序逻辑不需要变化。
方法2
有小部分网站的防范措施比较弱,可以伪装下IP,修改X-Forwarded-for(貌似这么拼。。。)即可绕过。
大部分网站么,如果要频繁抓取,一般还是要多IP。我比较喜欢的解决方案是国外VPS再配多IP,通过默认网关切换来实现IP切换,比>做爬虫,或者采集数据过程中,遇到最多的问题不是代码bug,而是封IP。开发好一个爬虫,部署好服务器,随后开始抓取信息,不一会儿,就提示封IP了,这时候的内心是崩溃的。
那么,有什么办法不封IP呢首先,要了解为什么会封IP,这样才可以更好地避免封IP。有些网站反爬措施比较弱,伪装下IP就可以绕过了,大部分的网站的反爬措施都在不断加强,不断升级,这给预防封IP带来更大的困难。
有人说,使用代理IP就没事了了。诚然,使用大量的优质代理IP能够解决大部分的问题,但并非无忧无虑。我们知道,网站的反爬虫策略主要是反那些比较猖狂的爬虫,不可能反那些正常的用户。那么什么样的用户是正常的用户呢,如果将爬虫伪装成正常的用户呢,是不是就不会被封了。
首先,正常的用户访问网站频率不会太快,毕竟手速是有限,眼速也是有限的,爬虫要伪装成用户,那么抓取的频率就不能反人类,但这样一来,效率就大大降低了,怎么办能够 使用多线程来解决。
其次,一些网站往往需要验证码来验证,对于正常使用的用户来说,基本都没问题,但对于爬虫来说,就需要一套较为厉害的验证码识别程序来识别了,像12306这样的验证码就较为难搞定了。随后,就是一些其他的细节了,比如,UserAgent经常换一换,cookie要清一清,访问的顺序最好不要有规律,爬取每个页面的时间没有规律等等。反爬虫策略不断升级,相应的爬虫策略也要不断升级,不然有一天,你会发现,哪怕您使用了大量的代理IP,依然预防不了大面积的封IP,爬虫工作受阻


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13350117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-19
下一篇 2023-07-19

发表评论

登录后才能评论

评论列表(0条)

保存