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

如何正确使用BeautifulSoup库的find_all()与text()方法?爬取Divar网站低价标签遇None输出问题求助

解决BeautifulSoup提取文本返回None的问题

我一眼就看到两个关键问题导致你输出全是None,咱们一步步来修复:

1. 提取文本的方法写错了

你在循环里用的是v.txt,但BeautifulSoup里获取元素文本的正确属性是v.text(或者更灵活的v.get_text()),这是最直接的错误——因为txt根本不是BeautifulSoup元素的属性,所以返回None是必然的。

2. 元素class的匹配方式有误

你写的soup.find_all('div', attrs="kt-post-card__top-description kt-post-card-description")里,attrs参数的用法不对:直接传字符串的话,BeautifulSoup会把它当作元素的id属性值来匹配,而不是class属性。

要匹配多class的元素,正确的写法有两种:

  • 使用class_参数(因为class是Python关键字,所以加下划线):
    c = soup.find_all('div', class_="kt-post-card__top-description kt-post-card-description")
    
  • 或者用字典形式的attrs:
    c = soup.find_all('div', attrs={'class': 'kt-post-card__top-description kt-post-card-description'})
    

修正后的完整代码

把这两处问题改了之后,代码就能正常提取文本了,我还加了编码处理和strip()来优化输出:

import requests
from bs4 import BeautifulSoup
import re

url = 'https://divar.ir/s/tehran/auto'
# 模拟浏览器请求,避免被反爬拦截(可选但推荐)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
test_page = requests.get(url, headers=headers)
# 设置正确的编码,避免波斯语文本乱码
test_page.encoding = 'utf-8'
soup = BeautifulSoup(test_page.text,'html.parser')
# 正确匹配目标div元素
c = soup.find_all('div', class_="kt-post-card__top-description kt-post-card-description")
for v in c:
    # 提取并清理文本内容
    print(v.text.strip())

如果后续遇到请求被拒绝的情况,记得检查headers是否需要更新,或者考虑添加延迟请求来避免触发反爬机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:37:47