urllib.error.HTTPError: HTTP Error 403: Forbidden处理
有些服务器拒绝非浏览器查看,比如爬虫,因此,在用程序爬取服务器信息时,需要伪装成浏览器,就是改一下headers参数.-->在请求中添加UserAgent的信息
1、为什么要设置headers?
在请求网页爬取的时候,输出的text信息中会出现抱歉,无法访问等字眼,这就是禁止爬取,需要通过反爬机制去解决这个问题。headers是解决requests请求反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据。
服务器根据User-Agent判断是爬虫还是浏览器
2、 headers在哪里找?
谷歌或者火狐浏览器,在网页面上点击右键,–>检查–>剩余按照图中显示操作,需要按Fn+F5刷新出网页来
3、headers中有很多内容,主要常用的就是user-agent (用户代理)和 host(域名),他们是以键对的形式展现出来,
如果user-agent 以字典键对形式作为headers的内容,就可以反爬成功,就不需要其他键对;否则,需要加入headers下的更多键对形式。
4.另外
user-Agent的获取途径还有
针对chrome:
可以在地址栏输入:about:version 回车即可找到userAgent信息
针对其他浏览器:
在地址栏中输入:javascript:alert(navigator.userAgent) 回车即可找到userAgent信息
实例
import requests # --》requests模块得自己用pip安装,是第三方模块 res=requests.get("http://www.dianping.com/",headers=headers) print(res.text) #输出会出现:抱歉!页面无法访问....这就是限制爬虫了
#解决方法:加入headers,在requests.get(headers=headers)里面,添加headers #构建headers import requests headers={ "Host": "www.dianping.com" "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36" } res=requests.get("http://www.dianping.com/",headers=headers) print(res.text)
import urllib.request # --》导入urllib包中的request模块 headers={ "Host": "fishc.com.cn","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36" } req = urllib.request.Request(url="http://fishc.com.cn",headers=headers) res = urllib.request.urlopen(req) print(res)
5.requests 与 urllib区别
爬取数据的包有两个requests和urllib。新手(比如我)经常搞混。.
requests(第三方模块) |
urllib(包) |
llibrary | package |
import requests headers = {‘user-agent’:‘xxxx’} r = requests.get(url, headers = headers) |
from urllib.request import urlopen,Request headers = {‘user-agent’:‘xxxx’} url = Request(url, headers=headers) r=urlopen(url,timeout=10) |
返回一个response对象r | 返回一个response对象r |
6.注意module 'urllib' has no attribute 'request'错误
解决方法 import 包.属性
参考 https://blog.csdn.net/qq_42787271/article/details/81571229
https://www.cnblogs.com/AJim-ggsddu-999/p/9608642.html