我使用以下源代码:
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 响应。
问题是怎么出现的,如何解决?
问题是由您从脚本发出的大量 HTTP 请求引起的。显然,http://www.baha.com 有一些安全措施,防止单个主机发出太多同时(或接近并行)HTTP 请求而受到 DDoS 攻击。
您可以通过在请求之间添加人为延迟来阻止它,正如 @robert-haas 建议的那样:
在脚本的开头:
import time
然后在每个
requests.get
之后:
time.sleep(0.1)
请求之间的等待时间为 100 毫秒(您可以调整该时间,直到不再遇到问题 - 我可以想象您可能需要时不时地放置
time.sleep(3)
,否则 DDoS 防护将在几次请求后再次阻止您。