python爬虫遇到403如何解决?

0

代码如图。
尝试了requests和urllib,返回403后加了headers,但仍报错为403。
请问下各位该如何解决呢?
WechatIMG104.png


 
已邀请:
0

一只写程序的猿 - 一个圣骑士成熟的标志是不再向盲人解释阳光。公众号:Python攻城狮 2018-08-20 回答

并不是加了User-Agent就可以使对方网站认定为你是正常访问,特殊的网站会有别的反爬机制,你可以看下是不是有加了反外链。
0

djl 2018-09-21 回答

HTTPERROR_ALLOWED_CODES = [403]
楼主,可以尝试在settings加上这句试一下?
0

xiaotaomi - 努力脱贫的女汉子 2019-08-28 回答

请求被拒绝呢?
0

Kiwi2021 2021-07-15 回答

在上一篇博客中说到,程序使用一段时间后会遇到HTTP Error 403: Forbidden错误。 因为在短时间内直接<a href="https://www.1685100.com/view/z ... gt%3B 极速赛车</a>使用Get获取大量数据,会被服务器认为在对它进行攻击,所以拒绝我们的请求,自动把电脑IP封了。 解决这个问题有两种方法。一是将请求加以包装,变成浏览器请求模式,而不再是“赤裸裸”的请求。 但有时服务器是根据同一IP的请求频率来判断的,即使伪装成不同浏览器。由于是同一IP访问,还是会被封。 所以就有了第二种方法,就是降低请求频率。<a href="https://www.1685100.com/view/z ... gt%3B 天津快乐十分</a>具体说来也有两种方法。一种是在每次请求时暂停短暂时间,从而降低请求频率。 第二种是使用不同的IP进行访问。显然第一种方法不是最佳选择。 因为我们并不希望下载太慢,尤其是在请求次数很多时。当然如果间隔很短时间,从感官上并无差别,如0.1秒。 但对于服务器而言频率就降低了很多。 <a href="https://www.1685100.com/view/z ... gt%3B SG飞艇</a>所以这是一种最安全可靠的办法,尽管我们并不想用它。第二种方法也就是使用代理IP。下面逐一介绍。
1.增加Header

在浏览谷歌地图时会发现,浏览了大量数据依然没有被封IP,但程序中我们只下了几百张瓦片, 就被封了。主要原因是我们是直接Get请求数据,而浏览器的请求是有Header的。 基于这一点,把请求伪装成浏览器请求,就可以解决这个问题了。 代码如下:
但有时这样的做法也不一定有用。前面也说到,服务器是根据IP判断。 给请求增加Header只是伪装成不同的浏览器而已。如果同一个IP在短时间内频繁访问, 就算是浏览器请求也会被拒绝掉。因此对于这个问题就只好从另一个方面着手,即适当降低单个IP访问频率。 对于每个IP而言,每次请求操作之间都暂停一段时间。同时利用多个IP进行访问。通过这两种手段可以降低被拒绝的可能性。

2.代理IP

简单地说是通过自动更换不同IP来“迷惑”服务器,<a href="https://www.1683990.com/"> nice</a>让它认为是来自不同电脑的访问请求, 从而不会被拒绝掉。由于代理IP的时效性很强,所以需要经常更换。最好是“现用现找”。
3.终极方法

说了上面两种方法后,很自然地就会想到把两种方法结合起来。这样就会大大提高请求的种类。 如在下面的代码中Header有13个,IP有6个,排列组合就有78中请求。从理论上来说, 组合数越多就越不容易被封。同时再加上请求延迟,是较好的解决方案


 
 

要回复问题请先登录注册