You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫优化:如何用BeautifulSoup仅通过单个for循环提取两类不同class的h2标签下的span内容

重构你的Indeed爬虫:合并循环并优化代码

嘿,作为Python新手能独立写出爬虫已经超棒了!针对你想只用一个for循环处理两类标题的需求,我们可以通过几种方式重构代码,让它更简洁、符合Pythonic的编码规范,同时还能提升扩展性。

方法1:合并两个结果列表

你可以把title1和title2的结果合并成一个列表,然后用单个for循环遍历这个合并后的列表,避免重复的代码块:

def transform(soup):
    title1 = soup.find_all('h2', class_='jobTitle jobTitle-color-purple')
    title2 = soup.find_all('h2', class_='new topLeft')
    # 合并两个结果列表
    all_titles = title1 + title2
    for item in all_titles:
        # 增加容错:防止找不到span元素时报错
        title_span = item.find('span')
        if title_span:
            print(title_span.text)

方法2:用CSS选择器一次性匹配所有目标元素

BeautifulSoup支持CSS选择器,我们可以用逗号分隔多个选择器,一次性获取所有符合条件的h2标签,省去两次find_all的重复操作:

def transform(soup):
    # 用CSS选择器同时选中两个类的h2元素
    all_titles = soup.select('h2.jobTitle.jobTitle-color-purple, h2.new.topLeft')
    for item in all_titles:
        title_span = item.find('span')
        if title_span:
            print(title_span.text)

进阶优化:返回数据而非直接打印

为了让代码更灵活(比如后续要保存数据到文件或数据库),建议让transform函数返回标题列表,而不是直接打印——这更符合“单一职责”的编程原则:

def transform(soup):
    all_titles = soup.select('h2.jobTitle.jobTitle-color-purple, h2.new.topLeft')
    job_titles = []
    for item in all_titles:
        title_span = item.find('span')
        if title_span:
            job_titles.append(title_span.text.strip())  # 用strip()去除文本多余空格
    return job_titles

# 调用示例
c = extract(0)
titles = transform(c)
for title in titles:
    print(title)

内容的提问来源于stack exchange,提问作者ppincus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:17:33