使用Python BeautifulSoup提取Span的data-asin属性值失败求助
问题描述
我想抓取网页里指定span标签相关的字段,目标值是B0C4YKLXPQ,但用简单的find方法拿不到,以下几种尝试都失败了:
page_soup.find("div", {"id": "twisterContainer"}).find_all("data-asin")page_soup.find("div", {"id": "twisterContainer"}).find("span", {"id": "fitRecommendationsSection"}).span["data-asin"]page_soup.find("div", {"id": "twisterContainer"}).find("span", {"id": "fitRecommendationsSection"}).find_all("data-asin")page_soup.find("div", {"id": "twisterContainer"}).find_all("data-asin")page_soup.find("div", {"id": "twisterContainer"}).find_all(["data-asin"])
解决办法
你之前的写法全错在把data-asin当成HTML标签名了,但它其实是元素的属性,不是标签。正确的思路是通过属性选择器定位元素,再提取属性值:
方案1:在目标容器内全局查找带属性的元素
# 先定位到twisterContainer容器 container = page_soup.find("div", id="twisterContainer") # 查找容器内所有带data-asin属性的元素 target_elements = container.find_all(attrs={"data-asin": True}) # 取第一个元素的属性值(如果目标是第一个的话) if target_elements: print(target_elements[0]["data-asin"]) # 输出 B0C4YKLXPQ
方案2:精准定位父元素后查找
如果确定data-asin在fitRecommendationsSection这个span下面,可以缩小范围:
parent_section = page_soup.find("span", id="fitRecommendationsSection") # 在父元素下找带data-asin属性的子元素 target_element = parent_section.find(attrs={"data-asin": True}) if target_element: print(target_element["data-asin"])
失败原因说明
find_all("data-asin")这种写法是在找<data-asin>这种标签,但HTML里根本不存在这个标签,所以肯定返回空。必须用attrs参数指定要匹配的属性,才能找到对应的元素。
内容的提问来源于stack exchange,提问作者drazaie lang
相关产品推荐
相关产品推荐

