如何在BeautifulSoup中获取span标签数据?无法匹配span类问题求助
问题原因分析
- 你直接对
lugares[0]这个单个BeautifulSoup Tag对象遍历,默认遍历的是它的所有子节点(包含无意义的换行文本节点等),这些子节点本身并不包含class="item"的span元素,自然匹配失败 - 你不需要先遍历外层容器,应该直接从第一个
items-container容器中提取所有符合条件的span.item元素,再逐个遍历这些span即可
解决方法
- 拿到第一个
items-container容器后,直接调用find_all提取所有class="item"的span元素 - 遍历提取到的span列表,逐个获取文本和链接属性即可
修正后完整代码
from bs4 import BeautifulSoup import requests b=[] i="https://www.vivanuncios.com.mx" url = "https://www.vivanuncios.com.mx/s-renta-inmuebles/estado-de-mexico/v1c1098l1014p1" encabezado = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",'Accept-Language': 'en-US, en;q=0.5'} page = requests.get(url,headers=encabezado) soup = BeautifulSoup(page.content,"html.parser") lugares = soup.find_all("div",{"class":"items-container"}) # 先判断是否拿到了容器,避免索引报错 if lugares: first_container = lugares[0] # 直接提取容器下所有class为item的span item_spans = first_container.find_all("span", {"class": "item"}) for span in item_spans: a_tag = span.find("a") # 避免a标签不存在报错 if a_tag and a_tag.get("href"): locationlink = i + a_tag["href"] location = span.text.strip() b.append([location, locationlink]) # 打印结果验证 print(b)
补充优化点
- 增加了非空判断,避免页面结构变化时出现索引报错、属性不存在报错
- 对提取的地点文本加了
strip()方法,去掉多余的换行和空格
内容的提问来源于stack exchange,提问作者Sidyasknet
相关产品推荐
相关产品推荐

