如何处理python爬虫ip被封

如题所述

当python爬虫IP被封可用以下这几种方法:
1、放慢爬取速度,减少对于目标网站带来的压力,但会减少单位时间类的爬取量。
2、伪造cookies,若从浏览器中能够 正常访问一个页面,则可以将浏览器中的cookies复制过来使用
3、伪造User-Agent,在请求头中把User-Agent设置成浏览器中的User-Agent,来伪造浏览器访问。
4、使用代理IP,使用代理IP之后能够 让网络爬虫伪装自己的真实IP。
对于python网络爬虫来说,有时候业务量繁重,分布式爬虫是最佳的增强效率方式,而分布式爬虫又急切需要数目众多的IP资源,这一点免费IP是满足不了的,并且免费代理一般不提供高匿名的代理IP,因此不建议大家使用免费的代理IP。为了节约前期成本费而使用免费ip代理,最终只会因为免费ip的劣质而导致苦不堪言,反倒得不偿失。使用代理商代理IP可以有效的保障网络的安全,在IP被封的情况下可以有充足的IP可以进行更换,保证工作的正常进行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-09-17
爬虫的开工作者可以通过以下方式来解决这个问题:
1、放慢抓取速度,减小对于目标网站造成的压力。但是这样会减少单位时间类的抓取量。
2、第二种方法是通过设置ip代理等方法,突破反爬虫机制继续高频率抓取。但是这样需要大量稳定的ip转换器。下面介绍两种方式:普通的基于ADSL拨号的解决办法通常,在抓取过程中遇到禁止访问,可以重新进行ADSL拨号,获取新的IP,从而可以继续抓取。
第2个回答  2017-10-31

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

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

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

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

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

    服务器返回的响应头

    服务器返回的响应体


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

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

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

    proxies = {
     "http": "http://10.10.1.10:3128",
     "https": "http://10.10.1.10:1080",
    }

    requests.get("http://example.org", proxies=proxies)


    如上~~~
本回答被提问者采纳
第3个回答  2019-08-14
解决方法:
1、User-Agent伪装和轮换。
2、降低抓取频率,设置访问时间间隔。
3、使用芝麻爬虫代理。
相似回答