可狱可囚的爬虫系列课程 06:Requests的timeout参数

各位同学在使用爬虫时,有没有遇到过请求发出去很久却迟迟得不到响应结果的情况,相信很多同学都有过相似的经历,今天我们借助本文来给大家说一说应该如何解决。

一、远端服务器连接失败

举个例子,有些网站因为网络原因永远都不会访问成功,如果恰巧你的爬虫也在向一个类似的永远无法访问成功的服务器发送请求建立连接,如果没有任何防护措施,那么你的爬虫将会等待几分钟时间甚至更长,大大影响爬虫的效率,此时我们就可以借助 timeout 参数,指定超时时间让你的爬虫“冷静下来”,看代码,我使用对比的方式给大家看清楚 timeout 参数的作用。

import time
import requests

URL = 'https://www.google.com/'
Headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
try:
    start_1 = time.time()
    response = requests.get(url=URL, headers=Headers)
    print("状态码:", response.status_code)
except Exception as err:
    end_1 = time.time()
    print(err)
    print(f'无 timeout 等待:{end_1 - start_1}秒')

try:
    start_2 = time.time()
    response = requests.get(url=URL, headers=Headers, timeout=6)
    print("状态码:", response.status_code)
except Exception as err:
    end_2 = time.time()
    print(err)
    print(f'有 timeout 等待:{end_2 - start_2}秒')

image.png
有同学可能会问,timeout 设置了 6 秒,为什么结果是 10 秒。大家都知道,访问网站在宏观角度就分为发送请求(connect)和得到响应结果(read),这里的 timeout 参数如果指定一个值, 这一个值会分别作用于 connect 和 read,也就是说爬虫最大等待时间为 12 秒,当然也可以用二元组的形式给 timeout 赋值,例如timeout = (3, 6)的形式,给 connect 最大 3 秒等待,read 最大 6 秒等待。

二、远端服务器连接缓慢

程序员朋友都知道,Github 这个网站访问起来很奇妙,你永远不知道下一次能不能打开或者下一次打开需要多久,如果你此时要用爬虫访问一个服务器非常缓慢的网站,那么超时时间也要设定好。此刻我们需要将 timeout 设定为 None,意味着一直等下去。

import requests

URL = 'https://github.com/'
Headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
response = requests.get(url=URL, headers=Headers, timeout=None)
print("状态码:", response.status_code)

以上呢就是针对于 Requests 模块的 timeout 参数的解读,大家在写爬虫的时候斟酌好 timeout,灵活使用可以大大提高爬虫的效率。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HerrFu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值