【Python实战】Python采集二手车数据——超详细讲解

news2024/10/5 19:17:57

前言

今天,我们将采集某二手车数据,通过这个案例,加深我们对xpath的理解。通过爬取数据后数据分析能够直观的看到二手车市场中某一品牌的相对数据,能够了解到现在的二手车市场情况,通过分析数据看到二手车的走势,车商就可以利用这些数据进行定价,让想买二手车却不了解市场的人了解到大概的价格走势,到了店里不会被骗。

环境使用

  • python 3.9
  • pycharm

模块使用

  • requests

模块介绍

  • requests

        requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。

  • parsel

        parsel是一个python的第三方库,相当于css选择器+xpath+re。

parsel由scrapy团队开发,是将scrapy中的parsel独立抽取出来的,可以轻松解析html,xml内容,获取需要的数据。

相比于BeautifulSoup,xpath,parsel效率更高,使用更简单。

  • re

        re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • os

        os 就是 “operating system” 的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。

  • csv

        它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

模块安装问题:

  • 如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:

  • 失败一: pip 不是内部命令

                解决方法: 设置环境变量

  • 失败二: 出现大量报红 (read time out)

                解决方法: 因为是网络链接超时, 需要切换镜像源

   

    清华:https://pypi.tuna.tsinghua.edu.cn/simple
    阿里云:https://mirrors.aliyun.com/pypi/simple/
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    华中理工大学:https://pypi.hustunique.com/
    山东理工大学:https://pypi.sdutlinux.org/
    豆瓣:https://pypi.douban.com/simple/
    例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名

  • 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

                解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。

数据采集

发送请求

首先,我们要进行数据来源分析,知道我们的需求是什么?

明确需求:

  • 明确采集网站是什么?
  • 明确采集数据是什么?

        车辆基本信息

然后,我们分析车辆基本信息数据, 具体是请求那个网址可以得到我们想要的数据。

通过开发者工具, 进行抓包分析:

打开开发者工具: 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()

我们打印这些数据,看看效果吧。

可能大家注意到了,有返回空值的,这个可能就是被反爬,大家感兴趣可以用代理IP试试。 

保存数据

和我们上一篇一样,我们先写入字典,然后在写入csv文件里面。

        dit ={
            '车辆':title,
            '表显里程':tableShowMileage,
            '上牌时间':theRegistrationTime,
            '挡位/排量':blockADisplacement,
            '车辆所在地':addr,
            '查看限迁地':guobiao,
            '价格':price,
        }
        
        csv_writer.writerow(dit)

大家感兴趣还可以获取车辆信息更详细的数据,其实原理都是一样的。

总结

通过本文的学习,我们学习了数据采集。我们在采集数据的时候,遇到各种问题,自己在尝试解决问题,也是在一种学习,本次实战,我们明白如何使用xpath解析数据。今天就到这里,有什么问题,可以在评论区留言。

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++初阶 -1- C++入门part2-引用

文章目录6.引用什么是引用&#xff1f;引用的使用引用的应用传值、传引用效率比较权限引用和指针的区别⭐7.内联函数8.auto关键字9.基于范围的for循环10.指针空值——nullptr6.引用 什么是引用&#xff1f; “别名” int a 0; int& b 0;&#x1f446;即 地址为0x00000…

Redis7搭建主从+集群三主三从主从关系由集群分配

目录文件不清晰的去Redis7搭建主从哨兵了解 别忘记关闭防火墙 hash算法一致性 1背景–主从关系由客户端构建分配 三台虚拟机&#xff0c;一台虚拟机搭建两个redis 且两个不同的端口 第一台ip和分配两个端口 6381 6382 --- 192.168.154.128 6381 6382 第二台ip和分配两个…

分析型数据库:分布式分析型数据库

分析型数据库的另外一个发展方向就是以分布式技术来代替MPP的并行计算&#xff0c;一方面分布式技术比MPP有更好的可扩展性&#xff0c;对底层的异构软硬件支持度更好&#xff0c;可以解决MPP数据库的几个关键架构问题。本文介绍分布式分析型数据库。 — 背景介绍— 目前在分布…

人工智能前沿——「全域全知全能」人类新宇宙ChatGPT

&#x1f680;&#x1f680;&#x1f680;OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸&#xff01;&#xff01;&#x1f525;&#x1f525;&#x1f525; 一、什么是ChatGPT?&#x1f340;&#x1f340; ChatGPT是生成型预训练变换模型&#xff08;Chat G…

springBoot --- mybatisPlus自动生成代码

mybatisPlus自动生成代码mybatisPlus自动生成代码pom.xmlapplication.yml自动生成代码测试主启动类生成目录结果使用插件 --- 版本要求&#xff1a;3.4.0 版本以上pom.xml更新mybatisplus插件版本mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.…

离散数学_九章:关系(2)

关系9.2 n元关系及其应用 1、n元关系&#xff0c;关系的域&#xff0c;关系的阶2、数据库和关系 1. 数据库 2. 主键 3. 复合主键 3、n元关系的运算 1. 选择运算 (Select) 2. 投影运算 (Project) 3. 连接运算 9.2 n元关系及其应用 n元关系&#xff1a;两个以上集合的元素间…

网络安全从业人员应该如何提升自身的web渗透能力?

前言 web 渗透这个东西学起来如果没有头绪和路线的话&#xff0c;是非常烧脑的。 理清 web 渗透学习思路&#xff0c;把自己的学习方案和需要学习的点全部整理&#xff0c;你会发现突然渗透思路就有点眉目了。 程序员之间流行一个词&#xff0c;叫 35 岁危机&#xff0c;&am…

Amazon SageMaker测评分享,效果超出预期

一、前言随着科技的进步和社会的发展&#xff0c;人工智能得到了愈加广泛的重视&#xff0c;特别是最近大火的Chatgpt&#xff0c;充分展现了研发通用人工智能助手广阔的研究和应用前景。让越来越多的组织和企业跟风加入到人工智能领域的研究中&#xff0c;但机器学习的实施是一…

项目---基于TCP的高并发聊天系统

目录 服务端 服务端视角下的流程图 一、数据库管理模块 1.1 数据库表的创建 1.2 .对于数据库的操作 1.2.1首先得连接数据库 1.2.2执行数据库语句 1.2.3 返回数据库中存放的所有用户的信息 1.2.4返回数据库中存放的所有用户的好友信息 二、用户管理模块 2.1、UserInfo类&…

深度学习和人工智能之间是什么样的关系?

深度学习与人工智能概念的潜在联系&#xff0c;我们依然借助维恩图来说明&#xff0c;如图4.1所示。 1、人工智能 “人工智能”这个概念新鲜时髦但又含混模糊&#xff0c;同时包罗万象。尽管如此,我们仍尝试对 人工智能进行定义:用一台机器处理来自其周围环境的信息,然后将这些…

学习系统编程No.10【文件描述符】

引言&#xff1a; 北京时间&#xff1a;2023/3/25&#xff0c;昨天摆烂一天&#xff0c;今天再次坐牢7小时&#xff0c;难受尽在不言中&#xff0c;并且对于笔试题&#xff0c;还是非常的困难&#xff0c;可能是我做题不够多&#xff0c;也可能是没有好好的总结之前做过的一些…

15.transformer全解

欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 文章目录1.基础介绍2.网络结构2.1 Input/Output Embedding2.2 自注意力机制 self-attention2.3 point-wise全连接层2.4 位置编码 Position Encoding3.输入处理过程示例4.代码实现1.基础介绍…

论文阅读和分析:Hybrid Mathematical Symbol Recognition using Support Vector Machines

HMER论文系列 1、论文阅读和分析&#xff1a;When Counting Meets HMER Counting-Aware Network for HMER_KPer_Yang的博客-CSDN博客 2、论文阅读和分析&#xff1a;Syntax-Aware Network for Handwritten Mathematical Expression Recognition_KPer_Yang的博客-CSDN博客 3、论…

自然语言处理(七): Deep Learning for NLP: Recurrent Networks

目录 1. N-gram Language Models 2. Recurrent Neural Networks 2.1 RNN Unrolled 2.2 RNN Training 2.3 (Simple) RNN for Language Model 2.4 RNN Language Model: Training 2.5 RNN Language Model: Generation 3. Long Short-term Memory Networks 3.1 Language M…

论文阅读【14】HDLTex: Hierarchical Deep Learning for Text Classification

论文十问十答&#xff1a; Q1论文试图解决什么问题&#xff1f; 多标签文本分类问题 Q2这是否是一个新的问题&#xff1f; 不是 Q3这篇文章要验证一个什么科学假设&#xff1f; 因为文本标签越多&#xff0c;分类就越难&#xff0c;所以就将文本类型进行分层分类&#xff0c;这…

【人工智能与深度学习】判别性循环稀疏自编码器和群体稀疏性

【人工智能与深度学习】判别性循环稀疏自编码器和群体稀疏性 判别类循环稀疏自编码器 (DrSAE)组稀疏组稀疏自编码器的问与答图像级别训练,无权重分享(weight sharing)的局域过滤器 (local filters)判别类循环稀疏自编码器 (DrSAE) DrSAE的设计结合了稀疏编码(稀疏自编码器)…

数据库并发控制基本概念和基本技术

并发控制与基本技术一、并发控制1. 概述2. 并发访问可能出现的问题二、并发控制的主要技术1、基本技术2、封锁及锁的类型2.1、什么是封锁2.2、基本封锁类型2.2.1、排它锁&#xff08;Exclusive Locks&#xff0c;简记为 X 锁&#xff09;2.2.2、共享锁&#xff08;Share Locks&…

基于ArkUI框架开发-ImageKnife渲染层重构

ImageKnife是一款图像加载缓存库&#xff0c;主要功能特性如下&#xff1a; ●支持内存缓存&#xff0c;使用LRUCache算法&#xff0c;对图片数据进行内存缓存。 ●支持磁盘缓存&#xff0c;对于下载图片会保存一份至磁盘当中。 ●支持进行图片变换&#xff1a;支持图像像素源图…

【SSconv:全色锐化:显式频谱-空间卷积】

SSconv: Explicit Spectral-to-Spatial Convolution for Pansharpening &#xff08;SSconv&#xff1a;用于全色锐化的显式频谱-空间卷积&#xff09; 全色锐化的目的是融合高空间分辨率的全色&#xff08;PAN&#xff09;图像和低分辨率的多光谱&#xff08;LR-MS&#xff…

【微服务】6、一篇文章学会使用 SpringCloud 的网关

目录一、网关作用二、网关的技术实现三、简单使用四、predicates(1) 网关路由可配置的内容(2) 路由断言工厂&#xff08;Route Predicate Factory&#xff09;五、filters(1) GatewayFilter(2) 给全部进入 userservice 的请求添加请求头(3) 全局过滤器 —— GlobalFilter(4) 过…