使用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
相关产品推荐
相关产品推荐

