在Python中处理无Scrapy/Selenium/Spynner的无限滚动

在Python中处理无Scrapy/Selenium/Spynner的无限滚动,python,web-scraping,python-requests,Python,Web Scraping,Python Requests,我正试图从Trip.com,特别是这个页面,刮取数据。当您在浏览器中访问此页面时,它会显示20家酒店的结果,但当您向下滚动时,会加载更多酒店详细信息。现在我要做的是收集前50家酒店的数据。但我被要求不要使用刮痧,硒。感谢您的帮助。提前感谢。如果您使用DevTools并查看“网络”选项卡,您可以看到请求发送到https://www.trip.com/restapi/soa2/16709/json/HotelSearch?此端点以JSON格式返回结果 下一步是使用内置在Python中的urllib对

我正试图从Trip.com,特别是这个页面,刮取数据。当您在浏览器中访问此页面时,它会显示20家酒店的结果,但当您向下滚动时,会加载更多酒店详细信息。现在我要做的是收集前50家酒店的数据。但我被要求不要使用刮痧,硒。感谢您的帮助。提前感谢。

如果您使用DevTools并查看“网络”选项卡,您可以看到请求发送到
https://www.trip.com/restapi/soa2/16709/json/HotelSearch?
此端点以JSON格式返回结果


下一步是使用内置在Python中的urllib对请求进行反向工程并将其复制到Python中。这一步可能需要一些关于HTTP请求如何工作的经验和知识。

JavaScript必须在您滚动页面时从服务器读取这些数据-因此使用Chrome/Firefox中的
DevTools
(tab:
Network
)在您滚动页面时查看服务器的所有请求(尤其是
XHR
请求)-然后在代码中使用这些URL。@furas非常感谢您的回复。我想对50多个搜索类别动态执行此操作,因此复制URL将是一项非常繁琐的任务。请提供一种更具动态性的方法。首先使用
DevTools
在滚动时查看发送到服务器的请求,然后在代码中使用此信息。前20项来自原始页面,后30项来自您在DevTools中找到的url。通常,浏览器还会向服务器发送一些信息,而服务器也必须发送代码,并且可能会有关于类别的信息。当您在不同类别中滚动时,您必须使用
DevTools
来获取信息,并比较信息以查看浏览器的哪些更改以从不同类别中获取数据。感谢您的回复。是的,我了解了这一部分,但现在我关心的是如何使用请求获取请求头中“testab”的值。另外,你能解释一下关于反向工程请求的答案吗?或者给我指出一个方向。我建议使用一个名为Requests的库,它构建在urllib之上。逆向工程就是试图找出发送的值及其原因。对于请求,您可以通过执行类似于
requests.post(url,headers={“用户代理”:“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/85.0.4183.102 Safari/537.36”)的操作来发送头文件。
这一切都取决于尝试和错误。看起来请求使用了cookie。所以您希望使用会话来跟踪它。我们的目标是复制足够多的请求以获得返回的结果。我只使用请求,但当我传递URL时它只返回20个名称,但我想要50个名称,其余30个名称将在我向下滚动页面时可见。您能告诉我如何使用请求库获取50个名称吗