假设我要抓这个页面: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
我向下滚动页面越多,显示的结果就越多。但是上面的请求只给我初始负载。如何获取页面的所有信息,就好像我要手动向下滚动一样?
答案 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)
答案 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
如果您可以进行任何更改以使其变得更好,请随时这样做。 谢谢。