【Python网络爬虫笔记】12- Xpath快速爬取汽车之家2024年最新二手车信息

本文将深入介绍如何使用Python结合XPath来爬取汽车之家二手车信息,包括对汽车之家二手汽车网站的HTML结构解析。
顺便吐槽一下,二手车也不便宜,特别是宝马。

一、准备工作

首先,我们需要导入lxml库中的etree模块。这个模块提供了强大的功能来处理HTML和XML数据。

# 导入相关库
from lxml import etree

二、读取数据

在代码中,我们指定了本地文件goods.html作为数据来源。这是我事先保存好的汽车之家二手车页面的HTML文件。通过with open语句以UTF - 8编码读取文件内容,并将其存储在html变量中。
网站源代码见官网:
汽车之家二手车网站
在这里插入图片描述

三、汽车之家二手汽车网站HTML结构解析

通过观察汽车之家二手车页面的HTML结构(如图所示),我们可以看到以下关键部分:
在这里插入图片描述

  1. 整体页面布局
    • 页面顶部有一些筛选和导航选项,如“全国”、“上新通知我”、“清仓筛选”等。这些选项通常是通过divul等标签进行布局的。
    • 例如,可能存在<div class="filter - options">...</div>这样的结构来存放筛选选项。
  2. 车辆展示区域
    • 每辆二手车的信息以卡片的形式展示。从HTML结构来看,这些车辆信息可能被包含在多个li元素中,这些li元素可能位于一个ul列表中。
    • 例如,对应我们XPath中的//*[@id = "goodStartSolrQuotePriceCore0"]/ul/liidgoodStartSolrQuotePriceCore0的元素可能是一个大的容器,内部的ul列表存放了各个车辆的li元素。
    • 每辆二手车的具体信息在li元素内又有详细的布局:
      • 车辆图片:通常在一个img标签中展示,可能位于类似<div class="img - box">...</div>的结构中,在HTML代码中可以看到<div class="img - box" style="width:285px;height:214px;">...</div>,这是展示车辆图片的区域。
      • 车辆详情:包括车型、价格、里程等信息。这些信息通过文本节点和一些pspan等标签来呈现。
        • 车型:在<p class="card - name">...</p>标签内,例如<p class="card - name">宝马X6 M 2023款 X6 M雷霆版</p>
        • 价格:可能在<p class="card - unit - price">...</p>标签内,例如<p class="card - unit - price">176.88万</p>
        • 车辆信息:包括里程、上牌时间、地点、会员年限等,在<p class="card - info">...</p>标签内,例如<p class="card - info">0.4万公里/2024 - 01/重庆/5年会员</p>

四、使用XPath解析数据

  1. 创建解析树
    • 我们使用etree.HTML(html)将读取到的HTML字符串转换为一个可以用XPath进行操作的解析树对象tree。这一步是后续数据提取的基础。
  2. 定位汽车信息元素
    • 关键的XPath表达式//*[@id = "goodStartSolrQuotePriceCore0"]/ul/li被用来定位所有的二手车信息元素。这里的//表示在整个HTML文档中进行搜索,*表示匹配任意元素,[@id = "goodStartSolrQuotePriceCore0"]是一个属性筛选条件,它选择了id属性为goodStartSolrQuotePriceCore0的元素,然后通过/ul/li进一步定位到其下的ul元素中的li元素,这些li元素就是包含每辆二手车信息的节点。
  3. 提取汽车信息
    • 对于每一个li元素(代表一辆车),我们进一步使用XPath提取具体信息。
      • 车型:通过car.xpath('./@carname')[0]来获取carname属性的值,这里的./表示从当前li节点开始搜索,@carname表示选择carname属性。
      • 价格:使用car.xpath('./@price')[0]来获取price属性的值。
      • 车辆信息:通过car.xpath('./a/div[2]/p/text()')[0]来获取车辆信息。这里./a/div[2]/p/text()表示从当前li节点下的a元素,再到其下的第二个div元素中的p元素的文本内容。
  4. 代码实现

# 导入相关库
from lxml import etree


# 本地新闻网页文件路径
file_path = "goods.html"

# 读取本地文件内容
with open(file_path, 'r', encoding='utf-8') as file:
    html = file.read()


# 解析 HTML
tree = etree.HTML(html)

# 提取所有汽车信息

cars = tree.xpath('//*[@id = "goodStartSolrQuotePriceCore0"]/ul/li')
# 打印
# print(cars)
# 获取所有汽车项的名称、价格
for car in cars:
    name = car.xpath('./@carname')[0]
    price = car.xpath('./@price')[0]
    unit = car.xpath('./a/div[2]/p/text()')[0]
    print("车型:"+name)
    print("价格:"+price)
    print("信息:"+unit)
    print('-'*30)

在这里插入图片描述

通过以上步骤,我们能够利用Python和XPath轻松地从汽车之家二手车页面(这里是本地保存的HTML文件)中提取出我们需要的车型、价格和车辆信息。这种方法在数据挖掘和分析领域具有重要的应用价值,例如我们可以进一步对这些二手车数据进行价格分析、市场趋势研究等。同时,使用XPath能够精确地定位到我们需要的数据,避免了从大量无关的HTML内容中手动筛选的繁琐过程。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值