前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫系列之瓜子二手车抓手

爬虫系列之瓜子二手车抓手

作者头像
公众号guangcity
发布2019-09-20 15:23:28
1.4K0
发布2019-09-20 15:23:28
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

爬虫系列之瓜子二手车抓手

0.说在前面

1.网页分析

2.功能实现

3.调用呈现

0.说在前面

本次爬虫抓取瓜子二手车信息,包括车型及价格! 你可以学到?

  • cookie的作用
  • 多页面信息爬取
  • xpath使用
  • 两大数据库操作

那么接下来进入分析环节。

1.网页分析

网页地址为:

https://www.guazi.com/cq/buy

分析难点:

  • cookie,自己加入浏览器上的cookie,然后即可运行,需要填写下面的mysql数据库密码!
  • 多页面处理

https://www.guazi.com/cq/buy/o2/#bread

分析发现,多页面不同之处在于'o2'处,这里的2即为和页数,也就是说我只需要拿到页面的总页数,循环遍历即可,这就是本爬虫的核心思路,那么怎么拿到呢?看下图:

页面分析图 会发现,总页数在导数第二个li标签,那么通过xpath定位,在返回的list中去导数第二个即为总页面数!

这里需要注意,到了最后一个页面399时候,就不会出现下一页,此时399即为最后一个li标签,那么在xpath使用的时候,只需要用第一个页面的url获取总页面数即可!

2.功能实现

  • 导包
代码语言:javascript
复制
import pymysql
import requests
from lxml import etree
import pymongo
  • 类封装
代码语言:javascript
复制
class guazi_spider(object):

注意:以下所有的方法封装在本类中!

  • 初始化类方法
代码语言:javascript
复制
def __init__(self,mongo_uri,mongo_db):
        self.client = pymongo.MongoClient(mongo_uri)
        self.db = self.client[mongo_db]
  • 获取当前页面源码
代码语言:javascript
复制
def get_html(self,url):
        headers = {
            'Cookie': '填写自己的cookie'
        }
        raw_html = requests.get(url, headers=headers).text
        return raw_html
  • 获取页面数量
代码语言:javascript
复制
def get_PageNumber(self):
        url = 'https://www.guazi.com/cq/buy/'
        raw_html = self.get_html(url)
        selector = etree.HTML(raw_html)
        # 获取页面总数
        page_total = selector.xpath('//ul[@class="pageLink clearfix"]//li//span/text()')[-2]
        return  page_total
  • 获取页面数据
代码语言:javascript
复制
def get_AllPage(self,url):
        raw_html = self.get_html(url)
        selector = etree.HTML(raw_html)
        # 汽车型号
        car_name = selector.xpath('//ul[@class="carlist clearfix js-top"]//li//h2/text()')
        # 汽车价格
        car_price = selector.xpath('//ul[@class="carlist clearfix js-top"]//li//div[@class="t-price"]//p/text()')
        return car_name,car_price
  • mongodb存储
代码语言:javascript
复制
def Save_MongoDB(self,data):
        self.db[MONGO_COLLECTION].insert_one(data)
        self.client.close()
  • mysql存储
代码语言:javascript
复制
def Save_Mysql(self,car_name,car_price):
        # 填写数据库密码
        connection = pymysql.connect(host='localhost', user='root', password='xxx', db='scrapydb',
                                     charset='utf8mb4')
        try:
            for i in range(len(car_name)):
                with connection.cursor() as cursor:
                    sql = "insert into `guazi`(`汽车型号`,`汽车价格`)values(%s,%s)"
                    cursor.execute(sql, (car_name[i], car_price[i]))
            connection.commit()
        finally:
            connection.close()

3.调用呈现

  • 调用
代码语言:javascript
复制
guazi = guazi_spider(MONGO_URI,MONGO_DB)

page_total = guazi.get_PageNumber()
for page in range(1,int(page_total) + 1):
    print("-----第" + str(page) + "页爬取开始------")
    guazi_data = {}
    url = 'https://www.guazi.com/cq/buy/o' + str(page) + '/#bread'
    car_name,car_price = guazi.get_AllPage(url)
    print(car_name)
    print(car_price)
    guazi_data["汽车型号"] = car_name
    guazi_data["汽车价格"] = car_price
    guazi.Save_MongoDB(guazi_data)
    print(guazi_data)
    guazi.Save_Mysql(car_name,car_price)
    print("-----第" + str(page) + "页爬取结束------")

print("------爬虫结束------")
  • mysql 数据

mysql数据图

  • mongodb数据

mongodb数据图

  • 终端

终端数据图

  • 验证数据

mysql与mongodb数据量计算:

mysql中我们看到上图为第16页数据,当前页937条数据,而前15页为1000条,那么总共爬取到了15937条。对于mongodb数据而言,我们看到共399页数据,每页数据即为原网页的数据,除了最后一页为17条,前398页面中每一页有40条,那么计算公式为:398*40+17 = 15937条数据!两个数据库最终计算一致,说明无误!为了再此验证准确性,特拿出原网页的后面几条数据与两个数据库的最后几条数据对比,原网页最后页面如下:

原网页最后页面数据图 将这副图与上述两个数据库的最后数据比对,验证也正确!

最后:网站数据是动态的,我爬取到的数据量与你爬取的不一定一致,请掌握方法即可!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬虫系列之瓜子二手车抓手
    • 0.说在前面
      • 1.网页分析
        • 2.功能实现
          • 3.调用呈现
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档