某二手车网站数据爬取

要求:

  • 找到所要爬取的网站网址(url);
    今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread。
  • 观察网站,点开检查,找到我们所要爬取的数据。
  • 通过对网站数据的分析,明确目标数据的爬取方式后,通过请求获得数据。
  • 最后将得到的数据保存在文件中。

爬取前的准备工作
下载相关库:
今天我们要用到的库有:

  • 第三方:requests库
  • xlml库
  • bs4—BeautifulSoup库

开始代码演示及分析

import requests  #导入requests库,对url发送请求
import xlml
from bs4 import BeautifulSoup   #用bs4来解析网页,帮助我们爬取到我们想要爬取的内容
import re#首先确定我们的url
url = 'https://www.guazi.com/gy/dazhong/o2/#bread'   #这里我们爬取数据的对象为某二手车网站上大众品牌汽车的数据
#观察网页我们发现我们不止要在请求的时候加上user_agent,还需要加入cookie
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36','Cookie':'antipas=0601819329K313586692192455166; uuid=3bfbeb56-9f3e-4d0d-cbe3-260b14154476; cityDomain=gy; clueSourceCode=%2A%2300; user_city_id=36; Hm_lvt_936a6d5df3f3d309bda39e92da3dd52f=1595389723; ganji_uuid=2943330065231720816366; sessionid=641c79ee-5210-4be7-892b-466faf206b39; lg=1; close_finance_popup=2020-07-22; cainfo=%7B%22ca_a%22%3A%22-%22%2C%22ca_b%22%3A%22-%22%2C%22ca_s%22%3A%22seo_baidu%22%2C%22ca_n%22%3A%22default%22%2C%22ca_medium%22%3A%22-%22%2C%22ca_term%22%3A%22-%22%2C%22ca_content%22%3A%22-%22%2C%22ca_campaign%22%3A%22-%22%2C%22ca_kw%22%3A%22-%22%2C%22ca_i%22%3A%22-%22%2C%22scode%22%3A%22-%22%2C%22keyword%22%3A%22-%22%2C%22ca_keywordid%22%3A%22-%22%2C%22display_finance_flag%22%3A%22-%22%2C%22platform%22%3A%221%22%2C%22version%22%3A1%2C%22client_ab%22%3A%22-%22%2C%22guid%22%3A%223bfbeb56-9f3e-4d0d-cbe3-260b14154476%22%2C%22ca_city%22%3A%22gy%22%2C%22sessionid%22%3A%22641c79ee-5210-4be7-892b-466faf206b39%22%7D; preTime=%7B%22last%22%3A1595391260%2C%22this%22%3A1595389721%2C%22pre%22%3A1595389721%7D; Hm_lpvt_936a6d5df3f3d309bda39e92da3dd52f=1595391261'}

在这里,如果我们不加cookie的话会出现以下情况

url = 'https://www.guazi.com/gy/dazhong/o2/#bread'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
response = requests.get(url,headers=headers).content.decode()
print(response)


从而得不到我们想要的数据,但是当我们加上cookie时:

url = 'https://www.guazi.com/gy/dazhong/o1/#bread'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36','Cookie':'antipas=0601819329K313586692192455166; uuid=3bfbeb56-9f3e-4d0d-cbe3-260b14154476; cityDomain=gy; clueSourceCode=%2A%2300; user_city_id=36; Hm_lvt_936a6d5df3f3d309bda39e92da3dd52f=1595389723; ganji_uuid=2943330065231720816366; sessionid=641c79ee-5210-4be7-892b-466faf206b39; lg=1; close_finance_popup=2020-07-22; cainfo=%7B%22ca_a%22%3A%22-%22%2C%22ca_b%22%3A%22-%22%2C%22ca_s%22%3A%22seo_baidu%22%2C%22ca_n%22%3A%22default%22%2C%22ca_medium%22%3A%22-%22%2C%22ca_term%22%3A%22-%22%2C%22ca_content%22%3A%22-%22%2C%22ca_campaign%22%3A%22-%22%2C%22ca_kw%22%3A%22-%22%2C%22ca_i%22%3A%22-%22%2C%22scode%22%3A%22-%22%2C%22keyword%22%3A%22-%22%2C%22ca_keywordid%22%3A%22-%22%2C%22display_finance_flag%22%3A%22-%22%2C%22platform%22%3A%221%22%2C%22version%22%3A1%2C%22client_ab%22%3A%22-%22%2C%22guid%22%3A%223bfbeb56-9f3e-4d0d-cbe3-260b14154476%22%2C%22ca_city%22%3A%22gy%22%2C%22sessionid%22%3A%22641c79ee-5210-4be7-892b-466faf206b39%22%7D; preTime=%7B%22last%22%3A1595391260%2C%22this%22%3A1595389721%2C%22pre%22%3A1595389721%7D; Hm_lpvt_936a6d5df3f3d309bda39e92da3dd52f=1595391261'}
response =requests.get(url,headers=headers).content.decode()
print(response)


这样我们就可以进行下一步了
用bs4进行数据的解析

从这里我们可以看到,我们想要的数据包括在一个 ul 中 class = ‘carlist clearfix js-top’中
而每一个li data-scroll-track标签中的数据就是我们需要解析得到的数据。

soup = BeautifulSoup(response,'lxml')
li_list = soup.find('ul',{'class':'carlist clearfix js-top'}).find_all('li')
print(li_list)

通过用bs4对数据进行解析,我们得到如下数据:

从上面解析出来的数据中我们就可以得到

有下面这个从上面提取出来的代码可以看出,要拿到车的名称就可以:#<h2 class="t">大众 途观L 2018款 330TSI 自动两驱风尚版</h2>
for i in li_list:title = i.find('h2',{'class':"t"}).get_text()film_title = re.sub(r' ', '', title).split(' ')print(film_title)

根据观察我们的li_list结果我们可以按照 上面爬取汽车名一样爬取到他们的:年份、公里数、售价以及原价。

数据:

data = i.find('div',{'class':'t-i'}).get_text()film_data = re.sub(r'|', '', data).split('|')print(film_data)


这个数据里面包括了年份与公里数,所以我们想要这两个数据,直接从里面取出来就可以了,所以:

年份:

year = film_data[0]
print(year)


公里数:

lc = film_data[1]
print(cl)


最后我们还剩下售价与原价:
从网页页面我们可以看到:


一些数据售价与原价都有,但是有的数据只有售价,售价是所有商品都有的,所以我们先爬取它的售价。
售价包含在这个标签下:

shoujia = i.find('div',{'class':'t-price'}).find('p').get_text()print(shoujia)


这样我们就拿到了售价,但是还有原价,这里因为原价有的有,有的没有,所以我们需要做一个一场处理:

可以看到我们的原价在em标签中

    try:yuanjia = i.find('div',{'class':'t-price'}).find('em').get_text()print(yuanjia)except AttributeError:yuanjia = ''

这样我们就能将原价拿出来了

到现在我们一共爬取到一页的二手车的:型号、年份、公里数、售价、原价5个类型的数据。现在我们需要爬取更多页的数据。
所以我们就需要在最开始的代码前加上:

for page in range(1,50):print("*****************正在下载第{}页数据********************".format(page))url = 'https://www.guazi.com/gy/dazhong/o{}/#bread'.format(page)

来更改我们所要发请求的url
这里为什么这样加,是因为,当我们去网页里点击下一页,在下一页的时候,url改变的都是dazhong/o{}/#bread o后面的数字,当数字为1时就是第一页,5时就是第五页,所以我们range一下,来决定我们要爬取多少页

这样我们就可以得到更多的数据

最后就是将这些数据进行保存,方便下一步的分析:

    with open(r'瓜子二手车数据1.csv', 'a', encoding='utf-8')as f:for i in li_list:title = i.find('h2',{'class':"t"}).get_text()film_title = re.sub(r' ', '', title).split(' ')print(film_title)data = i.find('div',{'class':'t-i'}).get_text()film_data = re.sub(r'|', '', data).split('|')# print(film_data)year = film_data[0]print(year)lc = film_data[1]print(lc)shoujia = i.find('div',{'class':'t-price'}).find('p').get_text()print(shoujia)try:yuanjia = i.find('div',{'class':'t-price'}).find('em').get_text()print(yuanjia)except AttributeError:yuanjia = ''f.write('{},{},{},{},{}\n'.format(film_title,year,lc,shoujia,yuanjia))

添加一个with open将数据写入到csv文件中。

结果展示

完整代码

import requests
import lxml
from bs4 import BeautifulSoup
import parsel
import re
for page in range(1,50):print("************第{}页正在保存**********".format(page))url = 'https://www.guazi.com/gy/dazhong/o{}/#bread'.format(page)headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36','Cookie':'uuid=3bfbeb56-9f3e-4d0d-cbe3-260b14154476; cityDomain=gy; ganji_uuid=2943330065231720816366; lg=1; antipas=z6683504k93003WPO325643r3; clueSourceCode=%2A%2300; user_city_id=36; sessionid=c1cf6d12-f864-40c1-be6a-689466580011; close_finance_popup=2020-07-27; cainfo=%7B%22ca_a%22%3A%22-%22%2C%22ca_b%22%3A%22-%22%2C%22ca_s%22%3A%22seo_baidu%22%2C%22ca_n%22%3A%22default%22%2C%22ca_medium%22%3A%22-%22%2C%22ca_term%22%3A%22-%22%2C%22ca_content%22%3A%22-%22%2C%22ca_campaign%22%3A%22-%22%2C%22ca_kw%22%3A%22-%22%2C%22ca_i%22%3A%22-%22%2C%22scode%22%3A%22-%22%2C%22keyword%22%3A%22-%22%2C%22ca_keywordid%22%3A%22-%22%2C%22display_finance_flag%22%3A%22-%22%2C%22platform%22%3A%221%22%2C%22version%22%3A1%2C%22client_ab%22%3A%22-%22%2C%22guid%22%3A%223bfbeb56-9f3e-4d0d-cbe3-260b14154476%22%2C%22ca_city%22%3A%22gy%22%2C%22sessionid%22%3A%22c1cf6d12-f864-40c1-be6a-689466580011%22%7D; Hm_lvt_936a6d5df3f3d309bda39e92da3dd52f=1595389723,1595834426,1595834461; guazitrackersessioncadata=%7B%22ca_kw%22%3A%22-%22%7D; preTime=%7B%22last%22%3A1595835397%2C%22this%22%3A1595389721%2C%22pre%22%3A1595389721%7D; Hm_lpvt_936a6d5df3f3d309bda39e92da3dd52f=1595835398'}response =requests.get(url,headers=headers).content.decode()# print(response)soup = BeautifulSoup(response,'lxml')li_list = soup.find('ul',{'class':'carlist clearfix js-top'}).find_all('li')# print(li_list)with open(r'python爬虫实例——某二手车数据.csv', 'a', encoding='utf-8')as f:for i in li_list:title = i.find('h2',{'class':"t"}).get_text()film_title = re.sub(r' ', '', title).split(' ')print(film_title)data = i.find('div',{'class':'t-i'}).get_text()film_data = re.sub(r'|', '', data).split('|')# print(film_data)year = film_data[0]print(year)lc = film_data[1]print(lc)shoujia = i.find('div',{'class':'t-price'}).find('p').get_text()print(shoujia)try:yuanjia = i.find('div',{'class':'t-price'}).find('em').get_text()print(yuanjia)except AttributeError:yuanjia = ''f.write('{},{},{},{},{}\n'.format(film_title,year,lc,shoujia,yuanjia))

下篇文章我们来分析我们说爬取的数据

特别注意!!!!!!!!!!!!

             ## 每一次运行程序都要用登录网站成功的cookie!!!!!!!!不是会与不加cookie一样拿不到网页的数据

python爬虫实例——某二手车数据爬取相关推荐

  1. Python爬虫|高德地图地铁数据爬取与制图

    目录 一.高德地图数据爬取 1.爬取思路 2.python核心代码 二.Arcmap制图 一.高德地图数据爬取 1.爬取思路 首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下, ...

  2. python爬虫案例-陶瓷公司数据爬取

    用requests爬取要注意HTTPConnectionPool(host=xxx, port=xxx): Max retries exceeded with url...异常,出现这个异常的解决方法 ...

  3. Python爬虫 —— 以北京天气数据爬取为例

    本文以北京天气为例讲解数据爬取的整个流程,不涉及网络爬虫的原理,直接讲爬取代码怎么写! 1.首先找到你要爬取的网站url:'http://www.tianqihoubao.com/lishi/beij ...

  4. Python爬虫应用实战-网站数据爬取及数据分析

    实战一:中国大学排名 前言 由于上一篇文章中教会了大家如何存储数据,但是由于篇幅过大,就没有加入实战篇.想必大家也等着急了吧,所以今天就为大家带来两篇实战内容,希望可以帮助到各位更好的认识到爬虫与My ...

  5. php采集汽车之家demo,Python 爬虫实例(15) 爬取 汽车之家(汽车授权经销商)...

    有人给我吹牛逼,说汽车之家反爬很厉害,我不服气,所以就爬取了一下这个网址. 本片博客的目的是重点的分析定向爬虫的过程,希望读者能学会爬虫的分析流程. 一:爬虫的目标: 打开汽车之家的链接:https: ...

  6. Python 爬虫实例(15) 爬取 汽车之家(汽车授权经销商)

    有人给我吹牛逼,说汽车之家反爬很厉害,我不服气,所以就爬取了一下这个网址. 本片博客的目的是重点的分析定向爬虫的过程,希望读者能学会爬虫的分析流程. 一:爬虫的目标: 打开汽车之家的链接:https: ...

  7. Python 爬虫实例(1)—— 爬取百度图片

    爬取百度图片  在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNightimport json ...

  8. Python 爬虫实例(4)—— 爬取网易新闻

    自己闲来无聊,就爬取了网易信息,重点是分析网页,使用抓包工具详细的分析网页的每个链接,数据存储在sqllite中,这里只是简单的解析了新闻页面的文字信息,并未对图片信息进行解析 仅供参考,不足之处请指 ...

  9. python爬取贴吧所有帖子-Python爬虫实例(一)爬取百度贴吧帖子中的图片

    程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 ?后面为查询字 ...

最新文章

  1. Java 15 转正了,国内几大互联网公司均有贡献,其中腾讯最为突出!
  2. Could not decode a text frame as UTF-8 的解决
  3. 感恩节祝福html,感恩节祝福英文
  4. java适配器模式火鸡变凤凰是,读《HeadFirst设计模式》笔记之适配器模式
  5. 汇编工具安装三:已经配置好的汇编开发工具!
  6. Mac OS使用技巧之三:发射无线网络信号的方法
  7. 创建 floating IP - 每天5分钟玩转 OpenStack(106)
  8. 论文浅尝 - ISWC2020 | KnowlyBERT: 知识图谱结合语言模型补全图谱查询
  9. 在程序中表示什么_程序开发中:什么是前后端分离?你搞清楚了吗?
  10. 简述cookie增删改查的函数封装
  11. 电脑如何接受邮件服务器,如何设置邮箱服务器?IMAP、POP3有何区别?
  12. 树梅派-人脸识别菜鸡起步
  13. 【基于Python的Selenium2自动化测试】04 - 模拟126邮箱的登录
  14. Linux下7za对rar文件解压失败问题
  15. hive取当前周的周一
  16. 慕课网——MySQL优化
  17. RHEL6.0下LVS-DR+ipvsadm实现服务集群
  18. 电机与拖动(1)直流电机
  19. [原]素数筛法【Sieve Of Eratosthenes + Sieve Of Euler】
  20. 计算机考研专业课满分是多少,考研考几门课程总分多少 每年一共考几次

热门文章

  1. 求 小于 n 的 质数 几种方式
  2. 利用路由器实现DHCP中继
  3. 你知道Word翻译免费软件有哪些吗?
  4. 8192fu网卡linux,在Ubuntu 18.04下安装腾达Tanda U6无线网卡(RTL8192EU)驱动
  5. 英语作文计算机的用途和发展,1.计算机的用途;,2.计算机给人们生活带来的变化写英语作文(共9篇).doc...
  6. xlsx表格怎么制作
  7. 【软考|软件设计师】专业英语(软考真题)(2)
  8. 32 Longest Valid Parenthese
  9. 照片转3d模型_在线搭建3D场景
  10. 基于javaweb+mysql的教务管理系统(java+JSP+Spring+SpringBoot+layui+maven)