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

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

1. 请求headers处理

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

1583726636777686.png

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

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

1583726707340841.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(,

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值