Python动态加载页面的网页抓取

0 投票
4 回答
3569 浏览
提问于 2025-04-18 01:20

假设我想要抓取这个页面: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

对于动态生成的内容,数据通常是以json格式存在的。所以我们需要查看网页,进入网络选项,找到可以实时获取数据的链接。
举个例子:这个页面 - https://techolution.app.param.ai/jobs/ 的数据就是动态生成的。为了获取这些数据,我找到了这个链接 - https://techolution.app.param.ai/api/career/get_job/?query=&locations=&category=&job_types=

之后,进行网页抓取就简单多了,我是用pythonAnaconda Navigator来实现的。这里有一个github链接,可以查看我的代码 - https://github.com/piperaprince01/Webscraping_python/blob/master/WebScraping.ipynb

如果你能做出任何改进,欢迎随时进行修改。
谢谢。

1

如果内容是通过JavaScript动态添加的,最好的办法就是使用selenium来控制一个无头浏览器,比如phantomjs。你可以用selenium的webdriver来模拟滚动页面,等新内容加载出来后再提取网页的HTML,然后把这些内容交给你的BS解析器处理。

4

首先,从网页的源代码中提取出 data-max-id="451819302057164799" 这个值。

然后,利用这个 id 451819302057164799 来构建一个网址,格式如下:

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

接下来,访问这个链接,获取它的网页源代码,然后使用 simplejson 或其他的 json 库来解析这些数据。

记住,当你向下滚动页面时,下一页的数据可以从这个 json 中找到,具体是 "max_id":"451369755908530175" 这个值。

1

更好的解决办法是使用 Twitter API

有几个可以用来和Twitter互动的Python库,比如:

撰写回答