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

使用BeautifulSoup爬取汽车数据:存储span值及批量处理结果问题

解决方案

1. 单个结果提取与存储

原代码已经能定位到第一个结果的目标区域,只需精准提取字段并存入变量/列表即可:

import requests 
from bs4 import BeautifulSoup 
import pandas as pd

r=requests.get('https://www.finn.no/car/used/search.html?exterior_colour=6&exterior_colour=13&exterior_colour=14&location=22046&model=1.8078.2000555&q=Long+range&stored-id=75430241')
soup = BeautifulSoup(r.content, 'html.parser') 

# 获取首个结果的目标容器
first_car = soup.find("div", class_="mb-8 flex justify-between whitespace-nowrap font-bold")
# 提取容器内所有span的文本,存入列表
car_info = [span.text.strip() for span in first_car.find_all('span')]

# 拆分赋值给单独变量
year, mileage, price = car_info

print("单个结果存储:")
print(f"年份: {year}, 里程: {mileage}, 价格: {price}")
print(f"列表形式: {car_info}")

运行后会得到结构化的变量和列表,方便后续处理。

2. 批量爬取并保持格式正确

原批量输出格式混乱,是因为直接拼接了容器内的所有文本。正确做法是遍历每个结果容器,逐个提取字段:

import requests 
from bs4 import BeautifulSoup 
import pandas as pd

r=requests.get('https://www.finn.no/car/used/search.html?exterior_colour=6&exterior_colour=13&exterior_colour=14&location=22046&model=1.8078.2000555&q=Long+range&stored-id=75430241')
soup = BeautifulSoup(r.content, 'html.parser') 

# 获取所有结果的目标容器
all_cars = soup.find_all("div", class_="mb-8 flex justify-between whitespace-nowrap font-bold")

# 批量提取并整理数据
all_car_info = []
for car in all_cars:
    # 提取当前车辆的三个字段
    info = [span.text.strip() for span in car.find_all('span')]
    all_car_info.append(info)
    # 按原格式输出单条结果
    print("\n".join(info))
    print("---")

# 转成DataFrame,方便后续分析处理
car_df = pd.DataFrame(all_car_info, columns=['年份', '里程', '价格'])
print("\n结构化表格:")
print(car_df)

核心要点

  • 改用find_all('span')可以跳过容器内的空白节点,精准获取每个数据字段
  • 批量处理时,对每个结果单独提取字段再输出/存储,就能避免文本拼接混乱
  • 存入列表或DataFrame后,可直接用于统计、筛选等后续操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:48:16