如何使用BeautifulSoup提取HTML中指定span标签的文本内容
问题原因
你的现有实现存在两个问题:
- 遍历span过程中每次都直接覆盖
location变量,没有存储每次的有效结果,最后只能拿到最后一次循环的值 - 没有过滤无意义的span,包含逗号、空白内容的分隔用span也被纳入了遍历范围,干扰有效内容提取
最优解决方案
因为目标span都带有语义化的itemprop属性,直接通过属性定位是最稳定的方案,不会因为后续HTML结构调整失效:
from bs4 import BeautifulSoup job_soup = BeautifulSoup(browser.page_source, "lxml") address_container = job_soup.find('div', id='job-location-name') # 精准定位对应属性的span city = address_container.find('span', itemprop='addressLocality').text.strip() state = address_container.find('span', itemprop='addressRegion').text.strip() # 得到所需结果 result = (city, state)
运行后result的值就是你需要的('Cupertino', 'California')。
遍历方案的修正写法
如果你一定要用遍历所有span的方式实现,修正后代码如下:
job_soup = BeautifulSoup(browser.page_source, "lxml") locations = job_soup.find('div', id='job-location-name').find_all('span') valid_loc = [] for span in locations: text = span.text.strip() # 过滤掉空文本和逗号 if text not in ('', ','): valid_loc.append(text) result = (valid_loc[0], valid_loc[1])
注意该方案依赖有效文本的顺序,稳定性不如属性定位方案。
内容的提问来源于stack exchange,提问作者iron502
相关产品推荐
相关产品推荐

