python请求机器人检测?
我一直在使用python请求机器人检测?,python,web-scraping,python-requests,Python,Web Scraping,Python Requests,我一直在使用请求库挖掘此网站。我在10分钟内没有向它提出太多要求。比如说25。突然,网站给了我一个404错误 我的问题是:我在某个地方读到,使用浏览器获取URL与使用请求之类的内容获取URL是不同的。因为requestsfetch不会得到cookies和浏览器可能会得到的其他东西。请求中是否有一个选项可以模拟浏览器,这样服务器就不会认为我是机器人了?或者这不是一个问题?基本上,您至少可以做一件事,就是发送用户代理标题: headers = {'User-Agent': 'Mozilla/5.0
请求
库挖掘此网站。我在10分钟内没有向它提出太多要求。比如说25。突然,网站给了我一个404错误
我的问题是:我在某个地方读到,使用浏览器获取URL与使用
请求
之类的内容获取URL是不同的。因为requests
fetch不会得到cookies和浏览器可能会得到的其他东西。请求
中是否有一个选项可以模拟浏览器,这样服务器就不会认为我是机器人了?或者这不是一个问题?基本上,您至少可以做一件事,就是发送用户代理
标题:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'}
response = requests.get(url, headers=headers)
除了请求
,您还可以通过使用模拟真实用户-它使用真实浏览器-在这种情况下,显然没有简单的方法将您的自动用户与其他用户区分开来。Selenium还可以使用“无头”浏览器
另外,检查您正在抓取的网站是否提供API。如果没有API或您没有使用它,请确保您知道该网站是否真的允许这样的自动web爬行,请研究使用条款
。你知道,在一段时间内有太多的请求后,他们可能会阻止你
另见:
edit1:selenium使用webdriver而不是真正的浏览器;i、 例如,它在标题中传递一个
webdriver=TRUE
,使其比请求
更容易检测到通常有帮助的事情:
- 标题应类似于普通浏览器,包括:
- 用户代理:使用最近的一个(请参阅),如果您发出多个请求,最好使用随机最近的一个(请参阅)
- 接受语言:类似于“en,en-US;q=0,5”(适应您的语言)
- 接受:标准格式类似于“text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8”
- 导航:
- 如果发出多个请求,请在它们之间放置一个随机超时
- 如果打开在页面中找到的链接,请相应地设置Referer标题
- 或者更好,模拟鼠标活动来移动、单击并跟随链接
- 应启用图像
- 应启用Javascript
- 检查是否在客户端javascript页面上下文中设置了“navigator.plugins”和“navigator.language”
- 使用代理