Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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 Html - Fatal编程技术网

Python 检测到自动的相同请求

Python 检测到自动的相同请求,python,web-scraping,python-requests-html,Python,Web Scraping,Python Requests Html,服务器如何从一个与交互会话中发出的请求相同的HTML请求中检测机器人?例如,我可以在Firefox中打开一个新的私有浏览器,输入一个URL,然后将所有内容返回。但是,当我复制加载页面的初始HTML请求(url、标题和所有内容)并在同一设备上使用脚本工具(如requests_HTML)进行复制时,我得到了403。服务器使用哪些其他信息来区分这两个请求?Firefox或html请求所做的事情是否在开发人员工具和python代码中不可见 替换的示例代码域: 从请求\u html导入HTMLSessio

服务器如何从一个与交互会话中发出的请求相同的HTML请求中检测机器人?例如,我可以在Firefox中打开一个新的私有浏览器,输入一个URL,然后将所有内容返回。但是,当我复制加载页面的初始HTML请求(url、标题和所有内容)并在同一设备上使用脚本工具(如requests_HTML)进行复制时,我得到了403。服务器使用哪些其他信息来区分这两个请求?Firefox或html请求所做的事情是否在开发人员工具和python代码中不可见

替换的示例代码域:

从请求\u html导入HTMLSession url='1〕https://www.example.com' 标题={ “接受”:“text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8”, “接受编码”:“gzip,deflate,br”, ‘接受语言’:‘en-US,en;q=0.5’, “连接”:“保持活动状态”, “DNT”:“1”, “主机”:“www.example.com”, “升级不安全请求”:“1”, “用户代理”:“Mozilla/5.0 Macintosh;Intel Mac OS X 10_12_6 AppleWebKit/603.3.8 KHTML,如Gecko版本/10.1.2 Safari/603.3.8” } 会话=HTMLSession response=session.geturl,headers=headers 请求\u http使用的是无头Chrome/Chrome浏览器,因此如果您确实发送相同的请求,则不应区分

通常http请求只包含http协议、方法和头

因此,如果两者都相同,那么奇怪的是,web服务器可以发现差异

服务器可能会检测到定时,但我假设这是第一个请求,您可以从相同的IP地址尝试这两个请求

如果请求与之前执行的请求完全相同,服务器可能会检测到该请求,但我假设您已经通过firs测试了这一点,首先尝试使用脚本,然后使用匿名浏览器

我想你也看过你的浏览器,没有重定向

可能发生的其他一些差异可能是在提供/接受密钥的SSL协商顺序期间

可能是,您的浏览器也尝试访问“favicon.ico”,但只有当页面和请求http不这样做时

我的建议是,首先要确保您能够通过http请求从浏览器中复制请求

我建议如下。尝试在本地计算机、虚拟机或远程服务器上的容器中设置自己的web服务器。 将nginx配置为在调试级别记录错误。
然后使用您的专用浏览器执行访问,然后使用request_http使用您的脚本执行访问,并查看生成的日志文件并查找任何差异。

我真的建议使用selenium软件包。请求在处理动态加载和异步显示时非常糟糕。它非常适合与API交互,但是如果您使用的是刮片,selenium就是一个工具。

我猜页面需要浏览器处理一些javascript代码来验证它是否真实,而您的请求可能无法做到这一点。试用selenium@Chris在收到第一个HTML响应之前执行JavaScript?这是怎么回事?如果这是对站点的第一个请求,它怎么知道该怎么办呢?如果你没有收到任何响应,它可能是你的头,如果你收到了一个响应,你没想到它可能是通过JavaScription进行的机器人检测,这只是为了确定。您的浏览器和脚本是否从同一IP地址发出请求?就好像他们不是那样问可能是你的IP地址被请求http使用在你的测试中被禁止了。请注意,请求http与请求是由同一作者编写的,但它是一个完全不同的野兽。它使用无头浏览器来执行和呈现请求。我仍然认为您是对的,了解selenium是否也会出现此问题可能非常有趣,但http对刮削的影响并不像您所想的那么坏。它还执行js代码。然而,对于给定的问题,在执行任何其他请求之前,或者在执行任何java脚本之前,它似乎是第一个返回200或403的请求