Python 爬取途虎养车 全系车型 轮胎 保养 数据


2021.7.27 更新

增加标题、发布时间参数

demo文末自行下载,需要完整数据私聊我


2021.2.19 更新

增加大保养数据


2020.12.17 更新

更新最新官网数据:116629条


2020.8.6 更新

新增车型参数


2020.5.30 更新

新增轮胎数据


1.获取全系车型品牌名称

  1. def get_brand(self):
  2. """
  3. 获取品牌名称,用来拼接车型列表url
  4. :return:
  5. """
  6. url = 'https://by.tuhu.cn/baoyang'
  7. self.driver.get(url)
  8. letters = self.wait.until(EC.presence_of_all_elements_located((By.XPATH, '//div[@id="div2"]/ul/li')))
  9. for i in range(1, len(letters)):
  10. letters[i].click()
  11. brands = self.wait.until(EC.presence_of_all_elements_located((By.XPATH, '//div[@id="CarBrands"]/ul/li')))
  12. brands = [i.get_attribute('data-brand') for i in brands]
  13. print(brands)
  14. for u in brands:
  15. with open('品牌名称.txt', 'a+', encoding='utf-8') as f:
  16. f.write(u)
  17. f.write('\n')

2.获取车型信息

  1. @retry(stop_max_attempt_number=3)
  2. def get_model(self, cond_brand):
  3. """
  4. 获取车型列表, 用来拼接排量url
  5. :return:
  6. """
  7. url = f'https://item.tuhu.cn/Car/SelOneBrand?callback=__GetCarBrands__&Brand={cond_brand}'
  8. res = requests.get(url, headers=self.headers, timeout=5)
  9. content = res.text.replace('__GetCarBrands__(', '').strip(')')
  10. content = json.loads(content)
  11. models = content['OneBrand']
  12. for model in models:
  13. try:
  14. first = model['Brand'].split(' ')[0] # 首字母
  15. brand = model['Brand'].split(' ')[2] # 品牌
  16. BrandType = model['BrandType'] # 车厂
  17. CarName = model['CarName'] # 型号
  18. ProductID = model['ProductID'] # 型号ID 获取车型详细信息用
  19. Tires = model['Tires'] # 轮胎尺寸
  20. print(f'{first} {brand} {BrandType} {CarName} {ProductID} {Tires}')
  21. # 首字母 品牌 车厂 型号 型号ID 轮胎尺寸
  22. yield first, brand, BrandType, CarName, ProductID, Tires
  23. except Exception as e:
  24. print(f'解析车型数据错误:{e}')
  25. continue

3.获取排量信息

  1. @retry(stop_max_attempt_number=3)
  2. def get_displacement(self, ProductID):
  3. """
  4. 获取排量, 用来拼接年份url
  5. :return:
  6. """
  7. url = f'https://item.tuhu.cn/Car/SelectVehicle?callback=__GetCarBrands__&VehicleID={ProductID}'
  8. res = requests.get(url, headers=self.headers, timeout=5)
  9. content = res.text.replace('__GetCarBrands__(', '').strip(')')
  10. content = json.loads(content)
  11. displas = content['PaiLiang']
  12. for i in displas:
  13. displa = i['Value'] # 排量
  14. yield displa

4.获取年份信息

  1. @retry(stop_max_attempt_number=3)
  2. def get_year(self, ProductID, displa):
  3. """
  4. 获取年份, 用来拼接保养信息url
  5. :return:
  6. """
  7. url = f'https://item.tuhu.cn/Car/SelectVehicle?callback=__GetCarBrands__&VehicleID={ProductID}&PaiLiang={displa}'
  8. res = requests.get(url, headers=self.headers, timeout=5)
  9. content = res.text.replace('__GetCarBrands__(', '').strip(')')
  10. content = json.loads(content)
  11. years = content['Nian']
  12. for i in years:
  13. year = i['Value'] # 年份
  14. yield year

5.获取保养信息

  1. def get_maintenance(self, url):
  2. session = HTMLSession()
  3. r = session.get(url, verify=True)
  4. try:
  5. r.html.render(retries=5)
  6. dosage = r.html.xpath('//p[@class="pack_tt2"]', first=True)
  7. if dosage:
  8. dosage = dosage.text.strip('(').strip(')')
  9. else:
  10. dosage = '官方暂无数据'
  11. engine_model = r.html.xpath('//div[@class="pack_biaoti"]')
  12. if engine_model:
  13. engine_model = [i.text for i in engine_model]
  14. motor_oil = engine_model[0].split('\n')[0]
  15. level = engine_model[0].split('\n')[1] if len(engine_model[0].split('\n')) > 1 else '暂无数据'
  16. machine_filter = engine_model[-1]
  17. else:
  18. motor_oil = level = machine_filter = '官方暂无数据'
  19. prices = r.html.xpath('//div[@class="pck_price"]')
  20. if prices:
  21. prices = [i.text for i in prices]
  22. motor_oil_money = prices[0]
  23. machine_filter_money = prices[-1]
  24. else:
  25. motor_oil_money = machine_filter_money = '官方暂无数据'
  26. session.close()
  27. return dosage, motor_oil, motor_oil_money, level, machine_filter, machine_filter_money
  28. except Exception as e:
  29. session.close()
  30. print(f'{url}数据获取失败 原因:{e}!!!')
  31. with open('错误记录.txt', 'a+', encoding='utf-8') as f:
  32. f.write(url)
  33. f.write('\n')

6.数据保存

  1. def save_xls(self, data):
  2. """
  3. 保存数据
  4. data : 字典格式 必须和表头长度一样
  5. :return:
  6. """
  7. path = os.path.abspath('.') + r'/全系车型机油数据.xls'
  8. if not os.path.exists(path):
  9. Header = ['首字母', '品牌', '厂商', '型号', '型号ID', '排量', '年份', '轮胎尺寸', '机油容量',
  10. '机油型号', '机油价格', '合成级别', '机滤型号', '机滤价格', '获取时间']
  11. df = pd.DataFrame(columns=Header)
  12. else:
  13. df_read = pd.read_excel(path)
  14. df = pd.DataFrame(df_read)
  15. new = pd.DataFrame(data, index=[1])
  16. df = df.append(new, ignore_index=True)
  17. df.to_excel(path, sheet_name='data', index=False, header=True)

ContOS服务器相关

  • centos后台运行Python

    nohup python -u test.py > test.log 2>&1 &

    nohup 不挂起的意思

    -u 代表程序不启用缓存,也就是把输出直接放到log中,没这个参数的话,log文件的生成会有 延迟

    test.log 将输出日志保存到这个log中

    2>1 2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;

    2>&1 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.

    & 最后一个& ,代表该命令在后台执行

*命令运行后会有提示,示例:

[1] 2880

代表进程2880中运行。

*查看nohub命令下运行的所有后台进程:

jobs

*查看后台运行的所有进程:

ps -aux

*查看后台运行的所有python 进程:

ps aux |grep python

或者

ps -ef | grep python

  • 杀死进程

    kill -9 pid # 根据进程id杀死进程

    sudo kill -9 $(pidof 进程名关键字) # 根据程序名杀死进程

踏坑:

  • URL请求数据时需先编码 from urllib.parse import quote
  • 保养页面分析后发现是js加载后数据,直接请求获取不到数据,使用requests_html模块二次加载页面后可正常返回数据,requests_html首次安装会自动下载chrome
  • ContOS启动Chromeium 报错缺少 libXcomposite.so.1

    错误提示:/root/.local/share/pyppeteer/local-chromium/575458/chrome-linux/chrome: error while loading shared libraries: libXcomposite.so.1: cannot open shared object file: No such file or directory

    原因:这是由于是最小化安装的centos,缺少相关的依赖

    解决:yum install libXcomposite libXcursor libXi libXtst libXScrnSaver libXrandr atk at-spi2-atk gtk3 -y
  • ContOS 报错:[Errno 12] Cannot allocate memory!!! 内存不足

    echo 3 > /proc/sys/vm/drop_caches # 释放内存缓存数据

    os.system('echo 3 > /proc/sys/vm/drop_caches') # python 调用系统命令
  • CentOS查看 占用 内存 最多的 进程

    ps -aux | sort -k4nr | head 5 # 查看内存使用最多的5个进程

    或者

    top (然后按下M,注意大写)

    ps -aux | sort -k3nr | head 5 # 查看CPU使用最多的5个进程

    或者

    top (然后按下P,注意大写)

demo下载:

https://pan.baidu.com/s/1aF0dGdr0XB_zskZoAh2s5g

密码: lvwc


本文仅供学习交流使用,如侵立删!

企鹅 : 1033383881


Python 爬取途虎养车 全系车型 轮胎 保养 数据的更多相关文章

  1. 途虎养车Tuhu商城系统开发

    途虎养车Tuhu商城系统开发,咨询:何经理152-2217-7508(微信同号)途虎养车商城小程序开发,途虎养车商城小程序平台开发,途虎养车商城小程序系统开发. 为什么能做得这么好,里面的门道确实不少 ...

  2. 用Python爬取分析【某东618】畅销商品销量数据,带你看看大家都喜欢买什么!

    618购物节,辰哥准备分析一波购物节大家都喜欢买什么?本文以某东为例,Python爬取618活动的畅销商品数据,并进行数据清洗,最后以可视化的方式从不同角度去了解畅销商品中,名列前茅的商品是哪些?销售 ...

  3. 使用Python 爬取 京东 ,淘宝。 商品详情页的数据。(避开了反爬虫机制)

    以下是爬取京东商品详情的Python3代码,以excel存放链接的方式批量爬取.excel如下 代码如下 from selenium import webdriver from lxml import ...

  4. Python爬取NBA虎扑球员数据

    虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球.足球.游戏电竞.运动装备.影视.汽车.数码.情感等一切人和事的见解,热闹.真实.有温度. 受害者地址 https://nba.hupu ...

  5. Python 汽车之家 全系车型参数(包含历史停售车型) 最全

    本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末 汽车之家2021 全系车型参数(包含历史停售车型) 2021.10.21更新 增加参数:电动扰流板.无框设计车门.隐藏电动门把手.自动驾驶 ...

  6. 没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

    由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个"段友"的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不 ...

  7. Python 爬取 热词并进行分类数据分析-[解释修复+热词引用]

    日期:2020.02.02 博客期:141 星期日 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[拓扑 ...

  8. 手把手教你使用Python爬取西刺代理数据(下篇)

    /1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...

  9. python爬取股票最新数据并用excel绘制树状图

    大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊. 不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们. 以下截图 ...

随机推荐

  1. [C++STL] 队列 queue 的入门

    队列结构 概念: 队列(queue):和栈相似,也是一种特殊的线性表.和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作.一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称 ...

  2. 什么!Sentinel流控规则可以这样玩?

    项目源码地址:公众号回复 sentinel,即可免费获取源码 前言 上一篇文章中,我们讲解了关于sentinel基本介绍以及流控规则中直接和快速失败的效果,有兴趣的可以去看上一篇文章,今天,我们给大家 ...

  3. js颜色调试器

    1 /* ColorTestViewer 颜色调试器 2 3 attribute: 4 onchange: Function; //颜色改变回调; 默认null 5 6 //以下属性不建议直接修改 7 ...

  4. UVA471 Magic Numbers 题解

    1.题目 题意很简单:输入n,枚举所有的a,b,使得 (1)满足a/b=n. (2)满足a,b各个位上的数字不相同. 2.思路 (1)对于被除数,要满足各个位上的数字,显然最大枚举到987654321 ...

  5. idea 中菜单栏定位到类的图标消失(小齿轮按钮)

    本文链接:https://www.cnblogs.com/hchengmx/p/14533349.html 在2019.2以及以下版本 勾选:Autoscroll from source: 在2019 ...

  6. Jenkins之配置GitHub-Webhook

    前提条件1: 运行Jenkins的机器需要安装git,并且git.exe文件在系统的环境变量里面,或者手动在 Manage Jenkins -> Global Tool Configuratio ...

  7. 开源流程引擎osworkflow、jbpm、activiti、flowable、camunda哪个好?

    市场上比较有名的开源流程引擎有osworkflow.jbpm.activiti.flowable.camunda.其中:Jbpm4.Activiti.Flowable.camunda四个框架同宗同源, ...

  8. Javaweb-在idea中配置Tomcat

    解决警告问题 为什么会有这个问题:我们访问一个网站,需要制定一个文件夹名字 最后点OK,Tomcat就亮起来了 运行成功弹出界面:

  9. JavaScript写放大镜效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Vue3.0系列——「vue3.0学习手册」第一期

    一.项目搭建 vite是尤大大开发的一款意图取代webpack的工具.其实现原理是利用ES6的import发送请求加载文件的特性.拦截这些请求,做一些编译,省去webpack冗长的打包时间.并将其与R ...