如何用BeautifulSoup抓取无id、class属性的<span>标签数据?
解决方案
你遇到的问题是find("span", class_=False, id=False)会匹配到最外层的<span>,而不是你需要的内部子<span>。以下是几种可行的解决办法:
方法1:使用CSS选择器定位直接子元素
利用CSS选择器span > span直接选中外层<span>的直接子<span>,精准获取目标标签:
from bs4 import BeautifulSoup html = ''' <span> <span>2 in Amazon Launchpad (<a href="/-/en/gp/bestsellers/boost/ref=pd_zg_ts_boost">See Top 100 in Amazon Launchpad</a>)</span> <br> <span>1 in <a href="/-/en/gp/bestsellers/drugstore/2860173031/ref=pd_zg_hrsr_drugstore">Forehead Thermometers</a></span> <br> <span>1 in <a href="/-/en/gp/bestsellers/boost/22130220031/ref=pd_zg_hrsr_boost">Amazon Launchpad Coupons</a></span> <br> </span> ''' soup = BeautifulSoup(html, 'html.parser') target_spans = soup.select("span > span") for span in target_spans: print(span.get_text(strip=True))
方法2:先定位外层容器,再遍历子元素
先找到最外层的<span>,再从中提取所有子<span>元素:
outer_span = soup.find("span") target_spans = outer_span.find_all("span") for span in target_spans: print(span.get_text(strip=True))
方法3:通过内容特征筛选
如果目标<span>都包含特定文本(比如示例中的"in"),可以结合文本内容进一步过滤:
target_spans = soup.find_all("span", string=lambda text: text and "in" in text.strip()) for span in target_spans: print(span.get_text(strip=True))
这些方法都能绕过无id/class的限制,精准抓取你需要的<span>内容。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

