使用BeautifulSoup爬取TrueCar时遇'NoneType'无text属性错误求助
解决TrueCar爬取时'NoneType' object has no attribute 'text'错误
错误原因分析
- 元素定位失败:你代码中直接调用
.text的元素(如v_model、v_year、v_mileage等),被find()方法返回了None。这意味着页面中找不到对应选择器的元素,可能是以下情况:- 部分车辆卡片缺失某些字段(比如无里程、无年份信息)
- 网站更新了页面结构,你用的class或
data-test属性已失效 - 反爬机制触发,返回的页面内容异常(如空白页、验证页)
- 代码逻辑缺陷:所有
find()操作后未做存在性检查就直接调用.text,一旦元素找不到就会触发NoneType错误。
修复方案
1. 给所有元素添加存在性校验
对每个需要提取文本的元素,先判断是否存在,再执行后续操作。示例修改:
heading = post.find('div', class_="vehicle-card-top") if not heading: continue v_model_elem = heading.find('span', class_="vehicle-header-make-model text-truncate") if not v_model_elem: continue v_model = v_model_elem.text v_year_elem = heading.find('span', class_="vehicle-card-year font-size-1") if not v_year_elem: continue v_age = today.year - int(v_year_elem.text) # 其他元素(里程、颜色、车况、价格)都需要做类似的存在性检查
2. 优化反爬应对策略
- 替换固定延迟为随机延迟,避免被识别:
import random time.sleep(random.uniform(1, 4)) # 随机1-4秒延迟 - 增加User-Agent池,每次请求随机选择:
user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15', # 可添加更多User-Agent ] head = {'user-agent': random.choice(user_agents)} - 请求后检查页面是否包含关键内容,比如判断
soup.find_all('div', attrs={"data-test": "cardContent"})是否为空,若为空则暂停更长时间再重试。
3. 验证页面结构有效性
手动访问目标分页(比如https://www.truecar.com/used-cars-for-sale/listings/location-irving-tx/?page=2),查看页面源码,确认你使用的class、data-test属性是否与当前页面一致,避免因网站更新导致定位失败。
内容的提问来源于stack exchange,提问作者amirreza es
相关产品推荐
相关产品推荐

