【发布时间】:2022-11-28 09:39:44
【问题描述】:
我尝试按照 this 方法来抓取这个 specific website containing names I am interested in. 的名称:
import requests
URL = "https://bair.berkeley.edu/students.html"
page = requests.get(URL)
print(page.text)
执行时,我只会得到:
-
在我的打印输出中该网站上列出的第一个人
-
当我在 Chrome 中检查它时,它显示为
<span class="name">Elaine Angelino</span>。然而,打印的 page.text 仅显示为<span class="name"></span>。我怎样才能解决这个问题并获得所有 ~500 名学生和他们的名字?任何帮助表示赞赏!
我试图找到以另一种方式提取 html 的方法,但到目前为止没有成功。
【问题讨论】:
-
我猜内容是由 JavaScript 动态生成的。您可以 1) 在浏览器中下载 html,另存为文件并从那里读取 2) 您尝试在浏览器中读取网络请求以查看数据是否作为简单的 JSON 对象被请求 3) 您可以使用 Selenium而不是请求。
-
正如@JohnnyJohnBoy 所说,据我所知,内容是使用 firebase 动态生成的 - 因此,您可能无法从日志中找到任何方便的 API 请求并尝试复制。如果您愿意尝试使用 Selenium,可以使用 this function 进行 selenium+bs4 抓取 [对于您的情况,您只需要将其命名为
soup = linkToSoup_selenium(URL, ecx='//span[@class="name"]')即可在解析之前加载所有名称]
标签: python html web-scraping beautifulsoup python-requests