但其实requests自带一个apparent_encoding的属性它可以理解为网页里的真编码.打印试试看print(r.apparent_encoding),得到结果utf-8和我们找到的结果一样.这样一来为了避免这种编码问题我们可以直接在代码中加上一句r.encoding = r.apparent_encoding
解决第二个问题再此之前先讲讲浏览器的开发者工具
打开开发者工具在浏览器的空白处右键选择检查
按一下键盘的F12键
找到浏览器的标识信息先点击network(火狐浏览器为网络)
我们发现底下什么也没有,接下来刷新网页
会出来很多的网址,这里我们找到百度的主页点击它,再选择右边的headers信息找到request headers下的User-Agent信息,这就是浏览器的标识信息
网站就是通过检测你的标识信息来判断你是正常的人访问还是程序访问,我们之前就是被检测到不是正常访问,所以返回了一个错误的网页信息
接下来我们要做的就是修改我们的头信息,让代码伪装成浏览器,具体操作如下
import requests # 导入requests库 url = "https://www.baidu.com" # 目标网址 headers = { \'User-Agent\': \'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36\' } # 这里是复制刚刚网页上找到的浏览器标识信息,将他装换成字典,实际上整个request headers里的内容都可以复制进去,但是这里只用User-Agent就足够了 r = requests.get(url,headers=headers) # 调用requests的get方法发起get请求,添加headers参数(第一个headers为参数名称,第二个requests是上面定义的字典名称) r.encoding = r.apparent_encoding # 矫正编码 print(r.text) # 打印获取到的网页代码