如何抓取无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
相关产品推荐
相关产品推荐

