gpt4 book ai didi

python - Python 请求超过 ReadTimeout

转载 作者:行者123 更新时间:2023-12-01 01:14:54 26 4
gpt4 key购买 nike

我正在尝试使用 Python 和请求抓取 Home Depot 网站。 Selenium Webdriver 工作正常,但需要太多时间,因为目标是在本地油漆店和电动工具店之间制作一个对时间敏感的价格比较工具。

当我向任何其他网站发送请求时,它会正常工作。如果我使用任何浏览器手动导航到该网站,它也可以正常工作(无论有或没有 session 数据/cookie 数据)。我尝试在请求中添加随机 header ,但这似乎对解决问题没有帮助。从我所看到的来看,这不是每个时间段发送太多请求的问题(考虑到 Selenium 和手动浏览仍然可以随时工作。)我相信这个特定问题不是因为速率限制。

我的代码:

from random import choice
import requests
import traceback

list_desktopagents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36']
def random_headers():
return {'User-Agent': choice(list_desktopagents),
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}

response = requests.get(
'https://www.homedepot.com/p/BEHR-1-gal-White-Alkyd-Semi-Gloss-Enamel-Alkyd-
Interior-Exterior-Paint-390001/300831629',
headers=myheaders,
timeout=10)

我的错误:

raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='www.homedepot.com', port=443): Read timed out. (read timeout=10)

有人对我还能做什么才能成功收到回复有建议吗?我更喜欢使用 Requests,但是任何与 selenium 不同的运行速度快的东西都适合。我知道我被阻止了,我的问题不是“发生了什么阻止我抓取?”,而是“我能做些什么来进一步人性化我的抓取,这样我就可以继续?'

最佳答案

错误来自用户代理。 Selenium 正在工作而不是请求的原因是因为 Selenium 正在使用 Web 驱动程序来发出请求,因此它更多 humanlike而请求作为脚本更容易被检测到。来自 Home Depot's robots.txt page看起来产品不允许被抓取。我刚刚使用了这段代码并通过使用此代码得到了响应:

headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
response = requests.get('https://www.homedepot.com/p/BEHR-1-gal-White-Alkyd-Semi-Gloss-Enamel-Alkyd-Interior-Exterior-Paint-390001/300831629', headers=headers)

print(response.content)

通过使用这些用户代理,您可以“欺骗”网站,使其认为您是一个真实的人,这就是带有 Selenium 的 Web 驱动程序所做的事情。

关于python - Python 请求超过 ReadTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54447889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com