Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python请求机器人检测?_Python_Web Scraping_Python Requests - Fatal编程技术网

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
  • 使用代理

第一个答案是使用selenium模块有点偏离范围可检测selenium是一个Web驱动程序不是一个正常的浏览器它可以检测到,但总有办法欺骗任何东西