python web抓取动态加载页面

时间:2014-04-04 12:14:36

标签: python twitter web-scraping beautifulsoup

假设我要抓这个页面:https://twitter.com/nfl

from bs4 import BeautifulSoup
import requests

page = 'https://twitter.com/nfl'
r = requests.get(page)
soup = BeautifulSoup(r.text)
print soup 

我向下滚动页面越多,显示的结果就越多。但是上面的请求只给我初始负载。如何获取页面的所有信息,就好像我要手动向下滚动一样?

4 个答案:

答案 0 :(得分:4)

首先解析html源代码中的data-max-id="451819302057164799"值。

然后使用id 451819302057164799构建一个如下所示的网址:

https://twitter.com/i/profiles/show/nfl/timeline?include_available_features=1&include_entities=1&max_id=451819302057164799

现在获取链接的html源代码并使用simplejson或任何其他json库进行解析。

请记住,下一页加载(向下滚动时)可从该json中的值"max_id":"451369755908530175"获得。

答案 1 :(得分:1)

如果使用javascript动态添加内容,最好的机会是使用selenium来控制像phantomjs这样的无头浏览器,使用selenium webdriver来模拟滚动,添加等待新的要加载的内容,然后只提取html并将其提供给您的BS解析器。

答案 2 :(得分:1)

更好的解决方案是使用Twitter API

有几个python twitter API客户端,例如:

答案 3 :(得分:0)

对于动态生成的内容,数据通常采用 json 格式。因此,我们必须检查页面,转到“网络”选项,然后找到可以为我们提供数据/响应的链接。 例如:页面-https://techolution.app.param.ai/jobs/数据是动态生成的。为此,我得到了此链接-https://techolution.app.param.ai/api/career/get_job/?query=&locations=&category=&job_types=

此后,网络抓取变得有点简单,我已经使用 Anaconda 导航器在 python 中完成了该操作。这是该链接的 github 链接-https://github.com/piperaprince01/Webscraping_python/blob/master/WebScraping.ipynb

如果您可以进行任何更改以使其变得更好,请随时这样做。 谢谢。