PYTHON爬取汽车之家数据

使用知识

  • 使用BeautifulSoup模块
  • 使用正则表达式
  • 使用到多线程爬取

使用说明

  • 使用前请安装BeauifulSoup
  • 起始页面: https://www.autohome.com.cn/grade/carhtml/A.html
  • 运行程序后会在当前目录下生成txt文件,内容为json格式.如下所示:

{“branch_first_letter”: “S”, “branch_name”: “萨博”, “branch_id”: “64”, “producer”: “萨博”, “producer_id”: “”, “car_series”: “Saab 900”, “car_series_id”: “s2630”, “car_price”: “暂无报价”}

源代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/1/16 15:34
# @Author  : wsx
# @Site    :
# @File    : cars.py
# @Software: PyCharmimport json
from multiprocessing import Pool
import requests
from requests.exceptions import RequestException
import re
from bs4 import BeautifulSoupdef get_one_page(url):"""请求网页函数.:param url::return:"""headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'}try:response = requests.get(url, headers=headers)print(response.status_code)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html, first_letter):"""网页处理函数, 生成器:param html::param first_letter::return:iterable"""# 加载网页soup = BeautifulSoup(html, 'lxml')# 创建字典,存储数据info = {'branch_first_letter': '', 'branch_name': '', 'branch_id': '', 'producer': '', 'producer_id': '','car_series': '', 'car_series_id': '', 'car_price': ''}# 找出所需信息在的标签branches = soup.find_all('dl')# 先获取品牌for branch in branches:info['branch_name'] = branch.dt.div.a.string.strip()info['branch_id'] = branch['id']info['branch_first_letter'] = first_letterprint('正在抓取...品牌:', info['branch_name'])# 生成新的处理块block = branch.find_all('dd')soup = BeautifulSoup(str(block), 'lxml')# 获取某一品牌下的所有制造商producers = soup.find_all('div', attrs={'class': 'h3-tit'})for producer in producers:info['producer'] = producer.a.get_text().strip()# 找不到这个参数呀.info['producer_id'] = ''print('正在抓取...生产商:', info['producer'])cars = producer.find_next('ul')for car in cars.find_all('li', attrs={'id': True}):info['car_series_id'] = car['id']info['car_series'] = car.h4.a.get_text().strip()# 价格这个参数难提取, 初步过滤一下price = car.find_all('a', attrs={'class': True, 'data-value': False})# 判断一下抓取的是不是价格, 用正则表达式再过滤一下if price:print(price[0].get_text())if re.match('.*?万.*?', price[0].get_text(), re.S):info['car_price'] = price[0].get_text().strip()else:info['car_price'] = '暂无报价'# 做成迭代器yield infodef write_file(content):"""将抓取数据保存成Json文件:param content::return: None"""with open('cars.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')f.close()def main(first_letter):"""主函数:param first_letter::return: None"""html = get_one_page('https://www.autohome.com.cn/grade/carhtml/' + first_letter + '.html')soup = BeautifulSoup(html, 'lxml')html = soup.prettify()# 测试时先存在本地以免频繁访问站点# with open('car_home.html', 'w', encoding='utf-8') as f:#     f.write(html)#     f.close()# with open('car_home.html', 'r', encoding='utf-8') as f:#     html = f.read()#     f.close()for item in parse_one_page(html, first_letter):write_file(item)if __name__ == '__main__':# 如不需要按照字母顺序, 则uncomment# pool = Pool()# pool.map(main, [chr(i + ord('A')) for i in range(26)])# 如需要多线程, 则commentfor letter in [chr(i + ord('A')) for i in range(26)]:main(letter)

大家可能会问:为什么爬取个简单的数据还要三层循环?我主要考虑到数据之间的关联性、层级性才使用了三层循环,这样才能保证数据之间的层级关系保持不乱。
编写代码过程中遇到BeautifulSoup中,find_all()方法如果只需要确定是否存在某个属性,而不指定具体属性值,可以写成下面这样:

car.find_all('a', attrs={'class': True, 'data-value': False})

本人小白,大神轻喷!

PYTHON爬取汽车之家数据相关推荐

  1. python爬取汽车之家数据_python 实现汽车之家车型数据爬虫

    爬虫保存数据库的样子: 详细数据在json_text字段里面 安装使用方法: git clone https://github.com/shancang/spider.git pip install  ...

  2. Python爬取汽车之家所有车型数据,以后买车就用这个参考了

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.大航海计划.BAT内推.学习资料等. 前言 2018年马上就要过去了,经过一年的奋斗,我相 ...

  3. python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片

    随着生活水平的提高和快节奏生活的发展.汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适.喜欢车辆的前提.例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽 ...

  4. 爬虫第四式:增量爬虫之爬取汽车之家数据

    今天我们实现增量爬虫~,先来了解一下啥是增量爬虫?? 增量爬虫: 通过爬虫程序监测某网站数据更新的情况,以便可以爬取到该网站更新出的新数据 通俗来讲:就是当你在爬取一个网站的数据的时候,反反复复在爬取 ...

  5. python爬取汽车之家图片_Python 汽车之家 车型全数据 爬取

    所有车型数据 分析发现所有车型数据在一个js文件中: ps:当然也可通过解析网页 xpath提取,或通过接口,获取方式有很多种,此文主要需要seriesId 车型ID 这一项数据 为获取车型价格做准备 ...

  6. 汽车之家 php,demo.php · 放屁大亨。/PHP爬取汽车之家数据 - Gitee.com

    /** * Created by PhpStorm. * User: wangjie * Date: 2018/9/18 * Time: 15:55 */ class demo { /** * cUR ...

  7. python爬取汽车之家_python爬取 汽车之家(汽车授权经销商)

    一:爬虫的目标: 打开汽车之家的链接:https://www.autohome.com.cn/beijing/,出现如下页面 我们的目标是 点击找车,然后出现如下图 我们要把图中的信息抓取到 二:实现 ...

  8. python爬取汽车之家图片,Python requests 爬取汽车之家全部品牌logo,urllib下载到本地...

    首先是汽车之家品牌页面的HTML 我们定位到图片那个位置,这个img标签的src加上https就是图片完整的地址 那么品牌名称就是下面那个p标签的text 接下来我们的目的就是从中取出src和text ...

  9. php爬取口碑商家数据,Python 爬取汽车之家口碑数据

    环境: win10 ,Contos7.4 python3.6.1 pycharm2017 retrying=1.3.3 requests=2.22.0 fake_useragent 抓包获取口碑数据接 ...

最新文章

  1. 订餐系统之自动确认淘点点订单
  2. web.config 测试账号
  3. JavaScript中调皮的undefined
  4. Qt QLCDNumber 13行实现 显示日期时间 颜色设置 刷新
  5. 酒桌扑克娱乐喝酒小游戏微信小程序源码下载多娱乐功能支持流量主
  6. 专科计算机专业软件工程,软件工程专业专科学校都有哪些?
  7. RuntimeError:The size of tensor a (100) must match the size of tensor b (12800) at non-singleton di
  8. 有用的函数-系统采集(一)
  9. 自定义ckeditor图片上传插件
  10. centos7.4运行hyperLedger fabric 1.3.0 first network
  11. 什么是Hadoop - HDFS - MapReduce - YARN - HA
  12. 简单粗暴搞定webpack4的style-loader!css-loader
  13. LRU算法(JAVA实现)
  14. 5G NR学习笔记:帧结构和物理资源
  15. windows二维码工具3.0
  16. 遇到的坑-语法错误: Non-UTF-8 code starting with '\xe7' in file
  17. Firefox 使用、设置和常见问题的解决方法
  18. 成人教育有什么用处?
  19. php开源多功能留言板网站源码V1.2
  20. 深度学习部署--搭建后台服务器

热门文章

  1. 让一部分人先学会以太网【信号完整性测试】
  2. [KO机器学习] Day 7 模型评估:评估指标的局限性
  3. @Deprecated详解
  4. 基于python文本挖掘实战_Python数据分析系列视频课程--学习文本挖掘
  5. 最新「智能车联网」综述论文,170篇文献全面概述智能车联网(VANETs)技术
  6. window 修改composer 安装的 php 版本
  7. c语言实现简单的计算器功能1
  8. 项目经理怎么做,才能让领导爱听你的工作汇报?
  9. word中给字体加上底纹
  10. 金蝶云星空与奇门WMS-A对接集成委外领料查询打通出库单创建