我试图解析用户滚动时加载的网站数据。滚动时可以显示有限数量的元素,但使用此元素仅给出第一部分(112个中的25个):
url = "http://url/to/website"
response = requests.get(url)
soup = BeautifulSoup(response.text)
如何告诉request
"滚动"在返回html之前?
答案 0 :(得分:5)
你不能。问题是基于对请求的误解;它只加载页面的内容。无尽的滚动由Javascript提供支持,Javascript要求不做任何事情。
你需要像Selenium这样的浏览器自动化工具才能做到这一点;或者找出滚动JS正在使用的Ajax端点并直接加载它。
答案 1 :(得分:2)
您唯一应该知道的是serverlet如何工作。
通常,onScroll
或onClick
或任何其他事件会触发AJAX request
到服务器。客户端javascript将呈现这些返回(JSON / XML ...)所以你应该做的唯一事情就是将这些AJAX请求重复到同一服务器以获取这些数据。
例如,浏览器中的操作如下所示:
1. Enter url on browser
> [HTTP GET REQUEST] http://url/to/website
2. Scroll on the page
> [AJAX GET] http://url/to/website/1
> [javascript on front-end will process those data]
3. Then, keeping scrolling on the page
> [AJAX GET] http://url/to/website/2
> [javascript on front-end will process those data]
4. ... (and so on)
问。如何使用python获取这些数据?
一个。一种简单的方法是使用browser > inspect > network_tab
来查找在该页面中滚动时发送的AJAX请求。并通过python重复那些带有对应标头的AJAX请求。