如何使用BeautifulSoup提取含连字符的HTML属性值?
如何提取HTML元素中含连字符的属性值?
我用BeautifulSoup编写了以下代码,提取src属性正常,但提取带连字符的data-src属性时失败:
from bs4 import BeautifulSoup as bs soup = bs(requests.get(url).content, "html.parser") for img in tqdm(soup.find_all("img"), "Extracting images"): img_url = str(img.attrs.get("data-src")) print(img_url) img_url = str(img.attrs.get("data")) print(img_url)
示例HTML代码:
<img alt="" class="lazy" src="https://www.url.com/assets/images/new-search-icon.svg"/> <img alt="" class="lazyload" data-src="https://url.tv/bcci/photos/1354/887cffe6-0664-4146-9e7b-27b83d71db56.jpg"/>
可行解决方法
在BeautifulSoup中,提取带连字符的属性值有几种可靠方式:
利用元素对象的
get()方法:这是最简洁的方式,直接传入带连字符的属性名即可,和字典get()用法一致,还能避免空值转字符串的问题:data_src_url = img.get("data-src") if data_src_url: print(data_src_url)通过
attrs字典索引:img.attrs本质是存储属性的字典,直接以带连字符的属性名为键取值:data_src_url = img.attrs.get("data-src") if data_src_url: print(data_src_url)
修正后的完整代码
from bs4 import BeautifulSoup as bs import requests from tqdm import tqdm url = "目标页面URL" soup = bs(requests.get(url).content, "html.parser") for img in tqdm(soup.find_all("img"), "Extracting images"): # 提取src属性 src_url = img.get("src") if src_url: print(f"src: {src_url}") # 提取data-src属性 data_src_url = img.get("data-src") if data_src_url: print(f"data-src: {data_src_url}")
内容的提问来源于stack exchange,提问作者RajeshS
相关产品推荐
相关产品推荐

