当用户滚动时,我试图解析一个加载的网站的数据。滚动时可以显示有限数量的元素,但使用该元素只会给出第一部分(112个元素中的25个):
url = "http://url/to/website"
response = requests.get(url)
soup = BeautifulSoup(response.text)
在返回html之前,我如何告诉request
“滚动”?
编辑:显然,请求不要这样做,我可以在Python中使用什么解决方案?
发布于 2016-10-19 10:32:57
您唯一应该知道的是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)
Q.如何使用python获取这些数据?
答:一种简单的方法是使用browser > inspect > network_tab
查找在页面中滚动时发送的AJAX请求。并通过python使用相应的标头重复这些AJAX请求。
发布于 2016-10-19 10:18:52
你不能。这个问题是基于对请求的误解,它只加载页面的内容。没完没了的滚动是由Javascript驱动的,而Javascript的请求是不会做任何事情的。
您需要一些浏览器自动化工具(比如Selenium )来完成这项工作;或者找出滚动的JS使用的Ajax端点并直接加载它。
https://stackoverflow.com/questions/40128383
复制相似问题