爬虫被403怎么办
403
先来给不知道的同学们科普一下错误码,错误码有很多啊,比如404(最常见的),那么为啥这会返还一个我们不知道是什么的码呢?
我们随便编辑一个Python爬虫程序
1 | import requests |
拿我的博客网址举个例子,我们发现终端的输出为
1 | Response <200> |
看不懂?没关系,有一个规律,2打头的都是请求成功。200的看了,来看看404
1 | import requests |
输出结果是什么
1 | Response <404> |
也是一个道理,4打头都是请求失败,不搞5打头了,一个4打头找了我老半天。
现在,重点分析403是个什么东西
403这玩意4打头看得出来是报错了,为啥报错呢?权限不够,403错误是一种在网站访问过程中,常见的错误提示,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。
现在很多网站的api接口返回httpcode返回码是403提示禁止访问。如果您也遇到这样的情况,请先不要急着去修改网站相关的参数
第一、先进api的网站。用浏览器访问,如果浏览器访问该api接口能成功。说明是设置了权限的问题。如果不能成功的话。很可以是该接口已修改或已失效,这时候就没办法访问了。
第二、如果浏览器能访问成功的话。那就好办了。调用该接口时,捕获异常中的responseBody,很有可能数据就在这里面,笔者就遇到的是这种问题。
也有可能是服务器看你不顺眼,把你挡在门外了,虽然我很喜欢用request,但是为了快,这次用 urllib3
1 | import urllib.request as request |
在这种情况下直接对网路进行连接,一般情况下会被服务器拒绝出现这样的报错
“”“urllib.error.HTTPError: HTTP Error 403: Forbidden”“”
这种情况是网站认为你不是普通用户操作,所以我们需要模拟普通用户。
一般用户使用会给网站发送一个这总系统和浏览器的信息,所以我们需要模拟。也要向网站发送一个这样的信息。
遇到这样子的,主要是爬虫被发现了,建议用Python的正则表达式,放出我之前写的一个残次品,虽然没什么用,但是我就哪一个写了正则表达式
1 | # coding = utf -8 |
上面那个是我爬熊猫办公的。其实还可以更简单,就是找到你浏览器的User-Agent,像我的就是
1 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 FS' |
加入,如下是urllib3爬ptt的
1 | #抓取PTT电影版的网页原始码(HTML) |