厉害了!实战爬取全网5000部手机|上篇

作者: 菜鸟学python | 来源:发表于2017-09-20 22:11 被阅读448次

    本篇作者:BlueDamage同学

    相信大家都有买手机的需求,那么全网上手机到底有多少个品牌呢,哪一种的手机价格最划算,评分最高,屏幕最大,硬件最牛等等这些信息我们都想知道,不如自己动手爬下整个全网的手机,慢慢研究,至少买手机的时候可以参考参考嘛.这篇文章综合了爬虫,代理,数据库多个知识,非常不错.

    环境: Python 3.5
    用到的库: os, re, random, time, sqlite3, requests, BeautifulSoup, pickle
    用到的工具:Pycharm

    1.网站分析

    这里我们爬取的是中关村在线网站,我们首先要对目标网站进行仔细的分析,才能确定用什么技术去处理:

    • 目标网站的url地址是否规整
    • 目标网站有无反爬虫策略
    • 目标网站的数据是不是方便的提取,格式有无前后不一致,如何兼容
    • 目标网站是静态网页还是动态加载的,要不要用selenium模拟器去爬取
    • 目前网站的爬取规模数据有多大,要不要用框架爬取等等
      下面我们先来分析一下目标网站吧
    网页一: 简略手机信息页面

    1141273是这个红框里面手机的id

    网页二: 手机综述介绍页面

    随意选择一款手机的连接, 进入其综述介绍的页面


    在这个页面, 想要获取手机的名称及品牌, 同时也获取几种价格(参考报价及商家报价),此外还想获取图片, 参数及点评页面的url

    由上三图可见, 图片, 参数及点评页面的url的构造, 都需要获取在1167243(手机id)前1168的数字串(前置id)
    网页三: 手机参数页面

    由图可见, 该手机有九大属性(基本参数, 屏幕,网络...), 大属性对应着几项小属性, 小属性对应着具体的内容,希望在爬取此页面时, 构造一个属性的大字典
    attrs={'基本属性':{'上市时间':'','手机类型':''},}
    网页四: 手机点评页面

    在点评页面, 要获取点评人数, 平均评分及详细评分, 好评块与差评块

    2.程序框架

    代码我们可以用Py2,也可以用Py3.因为用到的库py2和py3都有,我们先看一下整体的框架图:


    • 由于目标网站是中文网站,考虑网站里面有大量的中文字符串,为了减少麻烦,我们还是用Py3
    • 数据库这边我们用SQL数据库,用简单的sqlite3去操作一下
    • 反爬其实是一个比较头疼的问题,本篇代理是一个不错的选择
    • 整体的代码需要设计4个类,爬虫类,代理类,数据库类,考虑到采集手机的信息特别多再封装一个手机类,这样封装和隔离度比较好.如果要数据分析的话,可以再设计一个类,下面我们具体看一下吧
    1.手机类

    因为要采集的手机的信息太多了,从手机的价格,品牌,参数,屏幕,网络,硬件,摄像头,服务支持,评价等等,有十几种信息要采集,所以封装成类是比较好的方法



    self.attribute是一个大字典,字典套字典的数据结构

    2.数据库类

    数据库是把4900多只手机的所有信息全部存起来,为了便于查询和处理,我们设计了12个独立的表格,但是每个表格都用手机id作为key,所以联合查询也很方便.


    看一下代码,其实代码跟我们前面介绍的sqlite3教程有点类似

    因为数据库入门,特别是SQL语法我们讲了很多,这里不再一一重复,有兴趣的同学可以去看一下历史文章里面(数据库入门篇系列文章),下面是手机基本信息表和评分表两个表

    我们从网页上爬取数据,然后存入数据库,所有的数据都是从mobilePhoneList里面获取,里面存放了每一个手机类的信息

    看一下12个表中的phone table长啥样:

    一共4921部手机,忽然发现还有很多老牌的手机依然在网站上有销售

    结论:

    需要源码的同学,请留言

    相关文章

      网友评论

      本文标题:厉害了!实战爬取全网5000部手机|上篇

      本文链接:https://www.haomeiwen.com/subject/ztlasxtx.html