我试图制作一个表格,在那里我从this page收集每个作曲家的所有作品,并使用Python脚本添加“score”来排列它们,例如第300名得1分,第10名得290分,等等。你知道吗
然而,BeautifulSoup似乎没有找到li
元素。我做错什么了?网页HTML的截图:https://gyazo.com/73ff53fb332755300d9b7450011a7130
我已经尝试过使用soup.li
、soup.findAll("li")
和soup.find_all("li")
,但都返回“none”或类似的结果。打印soup.body
会返回正文,所以我想我确实有一个HTML文档。你知道吗
from bs4 import BeautifulSoup as bsoup
import requests
link = "https://halloffame.classicfm.com/2019/"
response = requests.get(link)
soup = bsoup(response.text, "html.parser")
print(soup.li)
我希望它至少能给我一个li
项,但是它返回None
。你知道吗
我没有看到所有的排名都在300-1之间。有时页面显示只有148页,其他时间显示146页,最低的是143页。不知道这是否是设计缺陷/缺陷。页面是javascript更新的,这就是为什么你会得到一个空列表。该内容尚未呈现。你知道吗
requests
只返回不依赖javascript呈现的内容,即使用浏览器时无法获得所看到的所有内容,如果启用了javascript,浏览器将允许在运行页面上的各种脚本时加载其他内容。这是现代响应式/动态网页的一项功能,例如,在页面上进行选择时,您不再需要更新整个页面。你知道吗通常,您可以使用dev toolsF12检查页面用于通过“网络”选项卡更新内容的web流量。打开“网络”选项卡,刷新整个页面,然后在XHR上进行筛选。你知道吗
在本例中,该信息实际上是从已经保存该信息的脚本标记中提取的。您可以打开“元素”选项卡(Chrome)并执行Ctrl+F搜索作曲家的姓名。您将发现一个匹配出现在脚本标记中。我使用regex通过匹配javascript
var songs = [];
找到这个脚本标记,然后在下面的regex组中找到包含编写器信息的对象。你知道吗来自目标脚本标记的示例:
你可以从脚本标签抓取这些
如果你能找到这些排名的其余部分,你可以压缩你的名单,同时扭转排名列表
无论哪种方式,您都可以使用标题的长度来生成一个数字列表,该列表将给出排名:
相关问题 更多 >
编程相关推荐