有时我们发送的网络请求可能会被服务器拒绝这可能是该网站设置了反爬虫机制来防止用户恶意采集信息,但这不代表我们不能访问该网站,我们可以模拟服务器的头部信息去访问。

1. 请求headers处理

        我们首先打开我们要访问的网站,然后根据浏览器的打开方式进入检查页面,例如谷歌浏览器可以直接按F12或者Ctrl+Shift+I,进入下要页面:

 python爬虫9

        找到document文件并单击,如下图页面:

 python爬虫10

        这个就为我们的头部信息,也就是我们当前访问此网站的用户信息,我们复制一下然后开始使用它,代码如下:

import requests
url = 'https://www.baidu.com/'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}#头部信息
r = requests.get(url,headers = headers)#发送网络请求
print(r.text)#以文本形式输出网页源码

        输出为网站的html源码,如下图:

 python爬虫11

        这种方式类似于我们模拟了一个用户去访问该网站,等同于手动在打开浏览器去访问。

2. 网络超时

        我们在发送网络请求的时候避免不了超时现象的发生,如果我们不设置一个超时时间,那么系统会因为它长时间未响应而无法打开网页。

        超时又分为连接超时读取超时

        连接超时就是在程序默认的等待时间内没有得到服务器的响应。

        我们来看个例子:

import datetime
import requests
url = 'http://www.google.com.hk'
print(datetime.datetime.now())
try:
    r = requests.get(url, timeout = 5).text
    print('获得响应')
except requests.exceptions.RequestException as s:
    print('连接超时')
    print(s)
print(datetime.datetime.now())

        输出结果为:

2020-02-19 21:09:06.084353
连接超时
HTTPConnectionPool(host='www.google.com.hk', port=80): Max retries exceeded with url: / 
(Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x0383A298>, 
'Connection to www.google.com.hk timed out. (connect timeout=5)'))
2020-02-19 21:09:11.125962

        由于国内的服务器无法正常访问谷歌,所以出现连接超时的现象,其中关键语句为:

r = requests.get(url, timeout = 5).text

        我们在这条语句中设置超时限定时间。
        我们再来看一下读取超时,读取超时就是指客户端等待服务器发送请求的时间,也就是指连接成功之后服务器返回响应之间等待的时间,为了防止服务器响应速度过慢而导致等待时间过长,我们可以设置读取时间,超过了规定时间即为读取超时,它的用法和连接超时类似,关键语句为:

r = requests.get(url, timeout=(5,10)).text

        在这里15即为读取限制时间,如果超过即为读取超时。

3. 总结

        本节的内容能够帮助我们高效的进行爬虫操作,模拟浏览器头部信息的访问方式在爬虫中会经常用到,各个浏览器对应的方式可能不同,大家可以通过自己的浏览器去找到相应的信息去解读。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)