爬虫技术基础(2)-header是处理及网络超时

点击打开在线编译器,边学边练

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

    1. 请求headers处理

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

 图片1.png

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

 图片2.png

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

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源码,如下图:

 图片3.png

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

    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. 总结

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



本文固定URL:https://www.dotcpp.com/course/319

第一章 人生苦短,我用Python
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 函数
第六章 面向对象编程
第七章 模块
第八章 异常处理和程序调试
第九章 文件及目录操作
第十章 GUI编程
第十一章 进程和线程
第十二章 数据库管理
第十三章 算法
第十四章 爬虫
第十五章 实战篇
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)