【汽车课堂】汽车品牌汽车口碑模块采集过程(一)
优采云 发布时间: 2021-05-28 03:09【汽车课堂】汽车品牌汽车口碑模块采集过程(一)
大家好,我要启航了。
应朋友的要求,帮助采集某个汽车之家的某些汽车品牌的销售数据,包括购买时间,型号,经销商和裸车价格等信息。
今天,我们将简要演示采集流程。您可以根据自己的兴趣进行扩展,例如对您最喜欢的品牌的汽车数据进行采集统计分析等等。
输入文字:
1.着陆页分析
目标网站是某汽车之家关于品牌汽车型号的口碑模块相关数据。例如,我们演示的Audi Q5L的口碑如下:
https://k.autohome.com.cn/4851/#pvareaid=3311678
为了演示,您可以直接打开上面的URL,然后将其拖动到所有口碑位置,然后找到我们这次需要的字段采集,如下图所示:
采集字段
我们翻了一页,发现浏览器URL已更改。您可以找到以下页面的URL规则:
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
对于上面写的URL,我们发现可变部分是车辆型号(例如485 1)和页码(例如2、3,4))),因此我们可以将URL参数构造为如下:
# typeid是车型,page是页码
url = f'https://k.autohome.com.cn/{typeid}/index_{page}.html#dataList'
2.数据请求
通过一个简单的测试,似乎没有抗攀爬,所以很简单。
让我们首先介绍我们需要使用的库:
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解析采集字段。
3.数据分析
由于需要翻页,因此我们首先可以通过重新正则表达式获取总页数。通过检查网页数据,我们发现可以通过以下方式获得总页数:
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','')
4.数据存储
由于没有防爬坡,因此我们在此将采集中的数据直接转换为pandas.DataFrame类型,然后将其存储为xlsx文件。
df = pd.DataFrame(items)
df = df[['购买车型', '购买配置', '购买地点', '购车经销商', '购买时间', '裸车购买价']]
# 数据存储在本地
df.to_excel(r'车辆销售信息.xlsx',index=None,sheet_name='data')
5. 采集结果预览
整个爬网过程相对简单,来自采集的数据也相对标准化。本文中的Audi Q5L示例如下:
采集结果预览
以上是本次的所有内容。这是相对简单的。有兴趣的学生可以尝试根据一些有趣的数据进行统计分析和可视化显示。
文章在这里,谢谢收看
说实话,每当我在后台看到一些读者的回应时,我都会感到非常高兴。我想向所有人贡献我最喜欢的编程干货,并回馈给每个读者,希望对您有所帮助。
主要干货是:
①超过2000篇Python电子书(应有主流和经典书籍)
②Python标准库数据(最完整的中文版本)
③项目源代码(四十或五十个有趣而经典的动手项目和源代码)
④有关Python,爬虫,Web开发和大数据分析的基础知识的视频(适合小白学习)
⑤Python的所有知识点摘要(您可以了解Python的所有方向和技术)
*如果可以使用,可以直接将其拿走。在我的QQ技术交流小组中,您可以自己取走它。组号是857113825。*