Python爬虫之自动爬取某车之家各车销售数据

一、目标网页分析

目标网站是某车之家关于品牌汽车车型的口碑模块相关数据,比如我们演示的案例奥迪Q5L的口碑页面如下:

https://k.autohome.com.cn/4851/#pvareaid=3311678

为了演示方式,大家可以直接打开上面这个网址,然后拖到全部口碑位置,找到我们本次采集需要的字段如下图所示:

采集字段

我们进行翻页发现,浏览器网址发生了变化,大家可以对下如下几页的网址找出规律:

https://k.autohome.com.cn/4851/index_2.html#dataList
https://k.autohome.com.cn/4851/index_3.html#dataList
https://k.autohome.com.cn/4851/index_4.html#dataList

对于上面写网址,我们发现可变部分是车型(如4851)以及页码(如2,3,4),于是我们可以构建url参数如下:

# typeid是车型,page是页码
url = f'https://k.autohome.com.cn/{typeid}/index_{page}.html#dataList'

二、数据请求

通过简单的测试,发现似乎不存在反爬,那就简单了。

我们先引入需要用到的库:

import requests
import pandas as pd
import html
from lxml import etree
import re

然后创建一个数据请求的函数备用:

# 获取网页数据(传递参数 车型typeid和页码数)
def get_html(typeid,page):
    # 组合出请求地址
    url = f'https://k.autohome.com.cn/{typeid}/index_{page}.html#dataList'
    # 请求数据(因为没有反爬,这里没有设置请求头和其他参数)
    r = requests.get(url)
    # 请求的网页数据中有网页特殊字符,通过以下方法进行解析
    r = html.unescape(r.text)
    # 返回网页数据
    return r

请求来的数据就是网页html文本,我们接下来采用re解析出一共多少页码,再用xpath进行采集字段的解析。

三、数据解析

由于需要进行翻页,这里我们可以先通过re正则表达式获取总页码。通过查看网页数据,我们发现总页码可以通过如下方式获取:

try:
    pages = int(re.findall(r'共(\d+)页',r)[0])
# 如果请求不到页数,则表示该车型下没有口碑数据
except :
    print(f'{name} 没有数据!')
    continue

总页码采集

关于待采集字段信息,我们发现都在节点div[@class="mouthcon-cont-left"]里,可以先定位这个节点数据,然后再进行逐一解析。

待采集字段信息所在节点

此外,我们发现每一页最多15个车型口碑数据,因此我们每页可以定位15个待采集信息数据集,遍历采集代码:

divs = r_html.xpath('.//div[@class="mouthcon-cont-left"]')
# 遍历每个全部的车辆销售信息
for div in divs:
    # 找到车辆销售信息所在的地方
    mt = div.xpath('./div[@class="choose-con mt-10"]')[0]
    # 找到所需字段
    infos = mt.xpath('./dl[@class="choose-dl"]')
    # 设置空的字典,用于存储单个车辆信息
    item = {}
    # 遍历车辆信息字段
    for info in infos:
        key = info.xpath('.//dt/text()')[0]
        # 当字段为购买车型时,进行拆分为车型和配置
        if key == '购买车型':
            item[key] = info.xpath('.//dd/a/text()')[0]
            item['购买配置'] = info.xpath('.//span[@class="font-arial"]/text()')[0]
        # 当字段为购车经销商时,需要获取经销商的id参数,再调用api获取其真实经销商信息(这里有坑)
        elif key == '购车经销商':
            # 经销商id参数
            经销商id = info.xpath('.//dd/a/@data-val')[0] +','+ info.xpath('.//dd/a/@data-evalid')[0]
            # 组合经销商信息请求地址
            jxs_url = base_jxs_url+经销商id+'|'
            # 请求数据(为json格式)
            data = requests.get(jxs_url)
            j = data.json()
            # 获取经销商名称
            item[key] = j['result']['List'][0]['CompanySimple']
        else:
            # 其他字段时,替换转义字符和空格等为空
            item[key] = info.xpath('.//dd/text()')[0].replace("\r\n","").replace(' ','').replace('\xa0','')

四、数据存储

由于没啥反爬,这里直接将采集到的数据转化为pandas.DataFrame类型,然后存储为xlsx文件即可。

df = pd.DataFrame(items)
df = df[['购买车型', '购买配置', '购买地点', '购车经销商', '购买时间', '裸车购买价']]
# 数据存储在本地
df.to_excel(r'车辆销售信息.xlsx',index=None,sheet_name='data')

五、采集结果预览

整个爬虫过程比较简单,采集下来的数据也比较规范,以本文案例奥迪Q5L示例如下:

到此这篇关于Python爬虫之自动采集某车之家各车销售数据的文章就介绍到这了,更多相关Python采集汽车销售数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python爬虫之爬取谷歌趋势数据

    一.前言 爬取谷歌趋势数据需要科学上网~ 二.思路 谷歌数据的爬取很简单,就是代码有点长.主要分下面几个就行了 爬取的三个界面返回的都是json数据.主要获取对应的token值和req,然后构造url请求数据就行 token值和req值都在这个链接的返回数据里.解析后得到token和req就行 socks5代理不太懂,抄网上的作业,假如了当前程序的全局代理后就可以跑了.全部代码如下 import socket import socks import requests import json im

  • Python数据分析之Python和Selenium爬取BOSS直聘岗位

    一.数据爬取的代码 #encoding='utf-8' from selenium import webdriver import time import re import pandas as pd import os def close_windows(): #如果有登录弹窗,就关闭 try: time.sleep(0.5) if dr.find_element_by_class_name("jconfirm").find_element_by_class_name("c

  • Python手拉手教你爬取贝壳房源数据的实战教程

    一.爬虫是什么? 在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但是这些获得数据的方式,有时很难满足我们对数据的需求,而手动从互联网中去寻找这些数据,则耗费的精力过大.此时就可以利用爬虫技术,自动地从互联网中获取我们感兴趣的数据内容,并将这些数据内容爬取回来,作为我们的数据源,从而进行更深层次的数据分析,并获得更多有价值的信息. 在使用爬虫前首先要了解爬虫所需的库(requests)或者( urllib.request ),该库

  • python爬取链家二手房的数据

    一.查找数据所在位置: 打开链家官网,进入二手房页面,选取某个城市,可以看到该城市房源总数以及房源列表数据. 二.确定数据存放位置: 某些网站的数据是存放在html中,而有些却api接口,甚至有些加密在js中,还好链家的房源数据是存放到html中: 三.获取html数据: 通过requests请求页面,获取每页的html数据 # 爬取的url,默认爬取的南京的链家房产信息 url = 'https://nj.lianjia.com/ershoufang/pg{}/'.format(page) #

  • Python爬取腾讯疫情实时数据并存储到mysql数据库的示例代码

    思路: 在腾讯疫情数据网站F12解析网站结构,使用Python爬取当日疫情数据和历史疫情数据,分别存储到details和history两个mysql表. ①此方法用于爬取每日详细疫情数据 import requests import json import time def get_details(): url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery3410284820553141302

  • 教你如何使用Python快速爬取需要的数据

    一.基础第三方库使用 1.基本使用方法 """例""" from urllib import request response = request.urlopen(r'http://bbs.pinggu.org/') #返回状态 200证明访问成功 print("返回状态码: "+str(response.status)) #读取页面信息转换文本并进行解码,如果本身是UTF-8就不要,具体看页面格式 #搜索"char

  • python爬取豆瓣电影TOP250数据

    在执行程序前,先在MySQL中创建一个数据库"pachong". import pymysql import requests import re #获取资源并下载 def resp(listURL): #连接数据库 conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '******', #数据库密码请根据自身实际密码输入 database = 'pachong', cha

  • python selenium实现智联招聘数据爬取

    一.主要目的 最近在玩Python网络爬虫,然后接触到了selenium这个模块,就捉摸着搞点有意思的,顺便记录一下自己的学习过程. 二.前期准备 操作系统:windows10 浏览器:谷歌浏览器(Google Chrome) 浏览器驱动:chromedriver.exe (我的版本->89.0.4389.128 ) 程序中我使用的模块 import csv import os import re import json import time import requests from sele

  • python爬虫之教你如何爬取地理数据

    一.shapely模块 1.shapely shapely是python中开源的针对空间几何进行处理的模块,支持点.线.面等基本几何对象类型以及相关空间操作. 2.point→Point类 curve→LineString和LinearRing类: surface→Polygon类 集合方法分别对应MultiPoint.MultiLineString.MultiPolygon 3.导入所需模块 # 导入所需模块 from shapely import geometry as geo from s

  • Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤

    思路:使用Python爬虫对腾讯疫情网站世界疫情数据进行爬取,封装成一个函数返回一个    字典数据格式的对象,写另一个方法调用该函数接收返回值,和数据库取得连接后把    数据存储到mysql数据库. 一.mysql数据库建表 CREATE TABLE world( id INT(11) NOT NULL AUTO_INCREMENT, dt DATETIME NOT NULL COMMENT '日期', c_name VARCHAR(35) DEFAULT NULL COMMENT '国家'

随机推荐