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

如何基于URL获取网页转为BeautifulSoup对象并提取二手车信息

爬虫后续步骤指导:从已保存的HTML提取车辆信息

一、遍历已保存的HTML文件并转为BeautifulSoup对象

你之前的代码仅处理了最后一个页面的HTML,需要循环遍历所有已保存的example{i}.html文件,逐个读取并转为BeautifulSoup对象。

二、提取目标字段

针对每个页面的BeautifulSoup对象,定位车辆列表节点,逐个提取所需信息:

  • 价格:从p.price节点提取文本
  • 车辆详情页URL:从车辆标题的父级a标签提取href,拼接域名得到完整URL
  • 生产年份、引擎参数:从车辆副标题(如p.car-model)拆分文本提取
  • 经销商信息:定位页面中经销商相关节点(如div.dealer-info)提取文本,无信息时标注默认值

完整代码示例

from bs4 import BeautifulSoup
import os
import json

# 存储所有提取的车辆信息
car_data = []

# 遍历1到49页的HTML文件
for i in range(1, 50):
    file_path = f"example{i}.html"
    # 检查文件是否存在,避免因网络问题导致的文件缺失报错
    if not os.path.exists(file_path):
        print(f"文件 {file_path} 不存在,跳过")
        continue
    
    # 读取HTML文件并转为BeautifulSoup对象
    with open(file_path, "r", encoding="utf-8") as fp:
        webpage = fp.read()
    soup = BeautifulSoup(webpage, "html.parser")
    
    # 定位所有车辆列表节点(修正原代码findall拼写错误为find_all)
    car_listings = soup.find_all('div', class_="col-lg-4 col-md-12 car-listing")
    
    # 遍历每个车辆节点提取信息
    for listing in car_listings:
        # 提取价格
        price_tag = listing.find('p', class_="price")
        price = price_tag.text.strip() if price_tag else "无价格信息"
        
        # 提取详情页URL(拼接域名补全相对路径)
        title_link = listing.find('h6', class_="car-make").find_parent("a")
        detail_href = title_link.get("href") if title_link else ""
        detail_url = f"https://jammer.ie{detail_href}" if detail_href else "无详情链接"
        
        # 提取生产年份和引擎参数(按页面文本格式拆分)
        model_tag = listing.find('p', class_="car-model")
        model_text = model_tag.text.strip() if model_tag else ""
        year, engine = "无法提取年份", "无法提取引擎参数"
        if "|" in model_text:
            parts = model_text.split("|")
            year = parts[0].strip()
            engine = parts[1].strip()
        
        # 提取经销商信息(根据页面实际结构调整节点类名)
        dealer_tag = listing.find('div', class_="dealer-info")
        dealer_info = dealer_tag.text.strip() if dealer_tag else "无经销商信息"
        
        # 将单条车辆信息存入列表
        car_data.append({
            "年份": year,
            "引擎参数": engine,
            "价格": price,
            "经销商信息": dealer_info,
            "详情页URL": detail_url
        })

# 将提取的数据保存为JSON文件,方便后续查看和分析
with open("车辆信息.json", "w", encoding="utf-8") as f:
    json.dump(car_data, f, ensure_ascii=False, indent=4)

print(f"共提取 {len(car_data)} 条车辆信息,已保存到车辆信息.json")

代码说明

  1. 文件遍历:通过range(1,50)循环处理所有已保存的HTML文件,加入文件存在检查避免报错;
  2. 节点定位修正:原代码findall为拼写错误,改为find_all;直接定位车辆列表节点,简化嵌套循环逻辑;
  3. 字段提取细节:
    • 详情页URL需拼接域名,因为页面内href为相对路径;
    • 年份和引擎参数通过拆分副标题文本提取,若页面格式变化需调整拆分逻辑;
    • 所有提取步骤加入空值判断,避免因节点缺失导致代码崩溃;
  4. 数据保存:最终将信息保存为JSON格式,便于后续解析和使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:35:19