使用Python BeautifulSoup提取div中data-url属性链接失败求解决方案
解决方案
- 原代码
i.findAll(['data-url'])用法错误:find_all/FindAll是用来查找HTML标签的,data-url是元素的属性而非标签名,所以无法匹配到对应内容 - 提取属性值需要用BeautifulSoup元素的
get()方法,直接打印父元素当然会输出完整标签内容
修改后的可运行代码如下:
import requests from bs4 import BeautifulSoup header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36" } resp = requests.get("https://www.chosic.com/free-music/all/" , headers=header) soup = BeautifulSoup(resp.content, 'lxml') url_list = [] # 注意不要用list做变量名,会覆盖Python内置的list类型 music = soup.find_all('div',{'class':'track-audio'}) for item in music: # 匹配所有携带data-url属性的子div元素 audio_tag = item.find('div', attrs={'data-url': True}) if audio_tag: # 提取data-url属性的属性值 music_url = audio_tag.get('data-url') url_list.append(music_url) print(music_url) # 输出完整的音频链接列表 print(url_list)
额外注意事项:
- 不要用
list作为变量名,会覆盖Python内置的列表构造函数,后续执行列表相关操作时会触发未知错误 - 增加了非空判断逻辑,避免页面部分
track-audio标签下无对应音频元素时触发空指针报错 attrs={'data-url': True}的写法可以直接匹配所有携带data-url属性的元素,不需要提前知晓对应子元素的类名
内容的提问来源于stack exchange,提问作者hf wassim
相关产品推荐
相关产品推荐

