Python采集二手车数据的超详细讲解
作者:极客飞虎 发布时间:2022-09-23 00:58:22
数据采集
XPath,XML路径语言的简称。XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath主要用于解析XML文档,可以用来获取XML文档中某个元素的位置、属性值等信息。XPath可以用于XML文档解析、XML数据抽取、XML路径匹配等方面。
发送请求
首先,我们要进行数据来源分析,知道我们的需求是什么?
明确需求:
明确采集网站是什么?
明确采集数据是什么?
车辆基本信息
然后,我们分析车辆基本信息数据, 具体是请求那个网址可以得到我们想要的数据。
通过开发者工具, 进行抓包分析:
打开开发者工具: F12 / 鼠标右键点击检查选择network
刷新网页: 让本网页数据内容重新加载一遍 <方便分析数据出处>
搜索数据来源: 复制你想要的内容, 进行搜索即可
import requests
url = 'https://www.che168.com/china/a0_0msdgscncgpi1ltocsp1exx0/'
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'}
res = requests.get(url,headers=headers)
我们和之前一样,获取数据,我们会发现,车辆的基本信息就在网页源代码中,我们今天就用xpath的方法来解析数据。
解析数据
接下来,我们用xpath解析数据。我们用开发者工具定位到标签位置。
我们通过网页源代码,我们可以获取到每一个网页的url。
selector=parsel.Selector(res.text)
detail_url_list = selector.xpath('//ul[@class="viewlist_ul"]/li/a[@class="carinfo"]/@href').getall()
我们可以看到,得到下面数据。
我们会发现,我们得到了两种网页,所以,在这里我们拼接网页就需要注意,这里,我不多说,直接看我是怎么写的。
if detail_url.split('/') == '':
detail_url = 'https:'+detail_url
else:
detail_url = 'https://www.che168.com'+detail_url
这样,我们就得到了每一个车辆信息的数据网页,看看运行之后的效果吧。
接下来,我们就依次访问某个链接,获取我们想要的数据。
responses = requests.get(detail_url,headers=headers)
detail_selector = parsel.Selector(responses.text)
我用不同颜色标注的,就是我们这次想要获取的数据,我们这里以车辆名称为例,讲解下path如何写。
title = detail_selector.xpath('string(//h3[@class="car-brand-name"])').get("").strip()
我们看看网页源代码是如何得到的xpath。
可能有人就要问了,这个
("").strip()
是什么意思?这个就是去除空格的,只是为了后期数据的美观。
后面的我就不一一展示了,我直接放代码了,不懂的在评论区交流。
tableShowMileage = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[1]/h4/text()').get("").strip()
theRegistrationTime = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[2]/h4/text()').get("").strip()
blockADisplacement = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[3]/h4/text()').get("").strip()
addr = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[4]/h4/text()').get("").strip()
guobiao = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[5]/h4/text()').get("").strip()
price = detail_selector.xpath('string(//span[@id="overlayPrice"])').get()
我们打印这些数据,看看效果吧。
可能大家注意到了,有返回空值的,这个可能就是被反爬,大家感兴趣可以用 * 试试。
保存数据
和我们上一篇一样,我们先写入字典,然后在写入csv文件里面。
dit ={
'车辆':title,
'表显里程':tableShowMileage,
'上牌时间':theRegistrationTime,
'挡位/排量':blockADisplacement,
'车辆所在地':addr,
'查看限迁地':guobiao,
'价格':price,
}
csv_writer.writerow(dit)
大家感兴趣还可以获取车辆信息更详细的数据,其实原理都是一样的。
来源:https://juejin.cn/post/7220339259161411645
猜你喜欢
- 第一种import win32clipboardimport time#速度快 容易出错class niubi(): def l
- 前言异步编程可以提高应用程序的性能和吞吐量,因为它可以充分利用 CPU 和 I/O 资源。当某个任务被阻塞时,事件循环可以切换到另一个任务,
- 严正声明:本文仅限于技术讨论,严禁用于其他用途。基础知识socket通信模块:针对TCP/IP协议簇进行的程序封装,在Windows/Lin
- vue3 reactive函数用法reactive的用法与ref的用法相似,也是将数据变成响应式数据,当数据发生变化时UI也会自动更新。不同
- 前言在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本。映射到数据库中。创建
- 前言最近发现一个神器,那就是GitHub和OpenAI联合构建的AI自动编程工具Copilot!Copilot基于自然语言处理模型GPT-3
- 大家有没有这种感觉,一到国庆、春节这种长假,抢火车票就非常困难?各大互联网公司都推出抢票服务,只要加钱给服务费就可以增加抢到票的几率。有些火
- ORM简介ORM概念对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在
- 如果你从来没有使用过Python,我强烈建议你阅读Python introduction,因为你需要知道基本的语法和类型。包管理Python
- 利用requests、BeautifulSoup、xlwings库抓取中国银行外汇牌价首页数据1. 利用requests、Beautiful
- 本文实例讲述了Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法。分享给大家供大家参考。具体实现方法如下:# 这里将一个
- 目录设计到的前端知识注册业务实现前端注册业务逻辑导入vue.js和ajax请求的js库准备register.js文件后端业务注册逻辑设计到的
- time库是python中处理时间的标准库。计算机时间的表达:time()、ctime()、gmtime();提供获取系统时间并格式化输出功
- 为何使用函数最大化代码的重用和最小化代码冗余流程的分解编写函数>>def语句在Python中创建一个函数是通过def关键字进行的
- 俄罗斯方块,一个很有趣的一个小游戏,此次基于html+css+javaScript实现,包含在一个方块落地后自动生成方块、操控方块的移动以及
- 介绍观察者模式:是一种行为型设计模式。主要关注的是对象的责任,允许你定义一种订阅机制,可在对象事件发生时通知多个"观察"
- 一、开始之前必须安装itchat库pip install itchat(使用pip必须在电脑的环境变量中添加Python的路径)或 cond
- Pytorch把Tensor转化成图像可视化在调试程序的时候经常想把tensor可视化成来看看,可以这样操作:from torchvisio
- 前言new = old[:]Python老鸟都知道以上代码是什么意思。它复制列表old到new。它对于新手来说是种困惑而且应该避免使用这种方
- 5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别。URL和路由5.0的URL访问不再支持普通URL模式,