urllib2.HTTPError: HTTP Error 403: Forbidden 解决方法 & requests get 403 error

摘要:
403Forbidden是HTTP协议中的状态代码。此状态表示服务器理解请求但拒绝执行任务。请求不应重新发送到服务器。当HTTP请求方法不是“HEAD”并且服务器想让客户端知道为什么它没有权限时,服务器应该在返回的信息中描述拒绝的原因。如果服务器不想提供任何反馈信息,服务器可以使用404NotFound而不是403Forbidden,例如Choovin。有些人说他们缺少饼干或Xxrf,但没有饼干和Xxrf。

参考:

通过测试应该是request中header的问题。

 1 class S0819MtimeTiantangPipeline(object):
 2     def process_item(self, item, spider):
 3         headers = {
 4                     "Host":    'img31.mtime.cn',
 5                     "User-Agent":    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:53.0) Gecko/20100101 Firefox/53.0',
 6                     "Accept":    'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
 7                     "Accept-Language":   'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
 8                     "Accept-Encoding":    'gzip, deflate',
 9                     "Connection":    'keep-alive',
10                     "Upgrade-Insecure-Requests":    1,             
11                 }
12         
13         req = urllib2.Request(url=item['addr'], headers=headers)
14         res = urllib2.urlopen(req)
15             
16         file_name = os.path.join(os.path.curdir, "down_pic", item['name'] + '.jpg')
17         with open(file_name, 'wb') as fp:
18             fp.write(res.read())

下面是我怎么得到正确的header的方法:

1. 准备:

Firefox浏览器+HttpFox插件

2. 步骤

1. 打开HttpFox,然后将一个你要request的url输入到Firefox浏览框里,回车

例: http://img31.mtime.cn/pi/2014/02/28/042456.50965899_1000X1000.jpg

2. 如下图选取所需要的header

urllib2.HTTPError: HTTP Error 403: Forbidden 解决方法 & requests get 403 error第1张

注:

1. 现在用requests抓取www.mtime.com图片又出现这个403问题了,有可能是被爬取的网站防采集程序给屏蔽了,现在还没找到方法,待处理。。。。

403 Forbidden 是HTTP协议中的一个状态码(Status Code)。可以简单的理解为没有权限访问此站。
该状态表示服务器理解了本次请求但是拒绝执行该任务,该请求不该重发给服务器。在HTTP请求的方法不是“HEAD”,并且服务器想让客户端知道为什么没有权限的情况下,服务器应该在返回的信息中描述拒绝的理由。在服务器不想提供任何反馈信息的情况下,服务器可以用404 Not Found代替403 Forbidden比如:choovin。

有人说缺少cookie或者是_xsrf,但是用FixeFox的httpfox抓出来的get信息里没有用到cookie和_xsrf呀(抓取时不需要登录)。

From: https://www.zhihu.com/question/29926060

Update: 

应该是我的IP因为爬取同一个网站太快而被暂时屏蔽了。

这篇文章非常好: http://www.cnblogs.com/junrong624/p/5533655.html

Update:

每个网站请求时间隔delay 1s 后解决问题,这个.....降低了别人服务器的压力,延长了自己的工作时间^_^(快速采集是一种恶习 From:《Python 网络数据采集》). 

其它优化时间方法:

1. 因为异步采集的有:

http://img21.mtime.cn

http://img31.mtime.cn

http://img5.mtime.cn

网址分别整理到三个列表里,每次请求一个列表里的一个网址,等只剩一个列表时在每个请求delay 1s.

2. 变换IP

免责声明:文章转载自《urllib2.HTTPError: HTTP Error 403: Forbidden 解决方法 & requests get 403 error》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF 自定义按钮 Style自信息和互信息、信息熵下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

JAVA 实现CLOB转String

CLOB定义了用于在数据库中保存文件的类型。SQLCLOB是一种内置类型,它将一个大型字符对象作为列值存储在数据库表的一行中。默认情况下,驱动程序使用SQLlocator实现Clob对象,这意味着Clob对象包含指向SQLCLOB数据的逻辑指针,而不是数据本身。Clob对象在其创建的事务期间有效。在一些数据库系统中,文本也用作CLOB的别名。例如,SQL S...

java.net.URISyntaxException的解决办法

直接采用Stringurl=“http:count=1”;HttpGethttpget=新的HttpGet(url);HttpResponseresponse=client.execute(httpget);例如,“|”&因此,不能直接使用String而不是URI来访问。然后我们可以使用URL生成URI的方法来解决这个问题。代码如下:URLu...

电脑不识别USB blaster驱动问题

电脑不识别USB blaster,如下图: 解决办法:手动更新...

docker安装MySQL5.7示例!!坑,ERROR 1045 (28000): Access denied for user

处理mysql1045错误1.在/usr/local/mysql/conf中添加一个文件。d目录:mysql文件的内容是:[mysqld]skip-grant-tables2重新启动mysql:dockerstartmysql5.73进入docker:dockerexec-itmysql5.7bash4登录mysql:mysql-uroot-p5将root密...

H3C交换机如何配置管理VLAN

1.输入“系统视图”(缩写为“sys”)进入系统配置模式[H3C]...

android获取Mac地址和IP地址

在实际项目中测试了以下方法以获取Mac地址:(1)设备打开Wifi连接并获取网卡的Mac地址(但不打开Wifi,无法获取Mac地址。此方法也是网络上最常用的方法)//本地MacpublicstaticStringgetLocalMacAddressFromWifiInfo(Contextcontext){WifiManagerwifi=(WifiManage...