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

Web Scraping项目中BeautifulSoup的find()函数无法生效问题求助

问题原因排查及修复方案

核心错误点

    1. 拼写错误:find_all参数写的herf=True是错误拼写,正确应为href,且li标签本身不存在href属性,加这个过滤条件会直接导致找不到任何匹配元素,循环根本不会执行。
    1. 动态页面爬取逻辑错误:目标站点bama.ir的车辆列表是JavaScript动态渲染生成的,直接用requests发起请求拿到的静态HTML里不包含你要抓取的列表数据,所以即使修正拼写也找不到对应节点。你虽然导入了selenium但全程没有调用,没有用到动态页面渲染能力。
    1. 缺少非空判断:即使能匹配到元素,也存在部分节点没有对应字段的可能,直接调用.text会抛出AttributeError异常。

修复后可运行代码

# 导入依赖
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
import time

# 用selenium启动浏览器加载动态页面
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://bama.ir/car')
# 等待页面渲染完成,可根据网络情况调整等待时长
time.sleep(3)

products= []
prices = []
kilometrs = []

# 用selenium拿到渲染后的完整页面源码
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 去掉错误的herf参数,只按class匹配li标签
for a in soup.find_all('li', attrs={'class':'car-list-item-li list-data-main'}):
    # 新增非空判断,避免属性报错
    name = a.find('div', attrs={'class':'title'})
    price = a.find('p', attrs={'class':'cost single-price'})
    kilometr = a.find('div', attrs={'class':'car-func-details'})
    if name and price and kilometr:
        products.append(name.text.strip())
        prices.append(price.text.strip())
        kilometrs.append(kilometr.text.strip())

driver.quit()

df = pd.DataFrame({'Product Name':products,'Price':prices,'kilometr':kilometrs}) 
df.to_csv('products.csv', index=False, encoding='utf-8-sig')

额外优化说明

  • 输出csv用utf-8-sig编码,避免Windows下打开csv出现乱码问题
  • 增加了浏览器资源自动释放逻辑,爬取完成后自动关闭浏览器进程
  • 对抓取到的文本做了strip()处理,去除多余的换行和空白字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:39:01