获取包含没有响应或状态代码的请求的页面

问题描述 投票:0回答:1

我使用以下源代码:

import requests

url = "https://www.baha.com/nasdaq-100-index/index/tts-751307/name/asc/1/index/performance/471"

web = requests.get(url)
print(web.status_code)

url = "https://www.baha.com/adobe/stocks/details/tts-117450574"
web = requests.get(url)
print(web.status_code)

url = "https://www.baha.com/advanced-micro-devices/stocks/details/tts-117449963"
web = requests.get(url)
print(web.status_code)

url = "https://www.baha.com/airbnb-inc/stocks/details/tts-208432020"
web = requests.get(url)
print(web.status_code)

url = "https://www.baha.com/alphabet-a/stocks/details/tts-117453820"
web = requests.get(url)
print(web.status_code)

url = "https://www.baha.com/alphabet-c/stocks/details/tts-117453810"
web = requests.get(url)
print(web.status_code)

大多数情况下,只能解析前三个页面,之后就没有状态代码,程序似乎停止响应,或者即使我可以在浏览器中打开该页面,有时也会收到 503 响应。

问题是怎么出现的,如何解决?

python python-3.x python-requests python-requests-html
1个回答
0
投票

问题是由您从脚本发出的大量 HTTP 请求引起的。显然,http://www.baha.com 有一些安全措施,防止单个主机发出太多同时(或接近并行)HTTP 请求而受到 DDoS 攻击。

您可以通过在请求之间添加人为延迟来阻止它,正如 @robert-haas 建议的那样:

在脚本的开头:

import time

然后在每个

requests.get
之后:

time.sleep(0.1)

请求之间的等待时间为 100 毫秒(您可以调整该时间,直到不再遇到问题 - 我可以想象您可能需要时不时地放置

time.sleep(3)
,否则 DDoS 防护将在几次请求后再次阻止您。

© www.soinside.com 2019 - 2024. All rights reserved.