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

如何抓取无class属性或class值为空的div文本?

如何抓取无class属性的div中的文本?

我来帮你搞定这个问题!你之前的代码里有个小坑:find_all(class_='jobs_page')返回的是多个元素的集合(ResultSet,类似列表),不能直接在这个集合上调用find_all,得先遍历每个jobs_page元素,再去查找里面无class的div。另外,抓取无class属性的div有几种简单的方法,我给你整理了修正后的代码和思路:

修正后的完整代码

from bs4 import BeautifulSoup
import requests

a = {}
def antal_pl(name=''):
    try:
        # 注意:原URL里的&要换成&,否则请求的地址可能不正确
        page_response = requests.get('https://antal.pl/oferty-pracy?s=&sid=&did=Accountancy', timeout=40).text
        page_content = BeautifulSoup(page_response, 'lxml')
        # 获取所有class为jobs_page的div(返回的是元素列表)
        jobs_pages = page_content.find_all(class_='jobs_page')
        
        # 遍历每个jobs_page元素
        for page in jobs_pages:
            # 方法1:最简洁的写法——匹配没有class属性的div
            no_class_divs = page.find_all('div', class_=False)
            
            # 方法2:用attrs参数指定class不存在
            # no_class_divs = page.find_all('div', attrs={'class': None})
            
            # 方法3:用lambda函数自定义过滤规则
            # no_class_divs = page.find_all(lambda tag: tag.name == 'div' and not tag.has_attr('class'))
            
            # 提取每个无class div的文本
            for div in no_class_divs:
                # strip=True去除文本前后的空白,过滤空内容
                clean_text = div.get_text(strip=True)
                if clean_text:
                    print(clean_text)
                    # 可以把文本存入你的字典a,比如按顺序存储
                    a[len(a)+1] = clean_text
                    
    except Exception as e:
        print(f"抓取过程出错:{e}")

# 调用函数
antal_pl()

关键知识点说明

  • 处理ResultSet集合:find_all返回的是多个元素的集合,必须遍历每个元素才能继续查找子节点,这是你之前代码失败的核心原因。
  • 匹配无class的div:
    • class_=False:BeautifulSoup的特殊写法,专门匹配没有该属性的标签;
    • attrs={'class': None}:直接指定class属性为None,效果和上面一致;
    • lambda过滤:更灵活,适合复杂的标签筛选场景。
  • 文本清洗:get_text(strip=True)可以自动去除文本前后的空格、换行等空白字符,避免抓取到空内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:22:41