Python程序员联盟程序员@IT·互联网

实战爬取全网近5000手机|下篇

2017-09-23  本文已影响624人  菜鸟学python

阅读本文大概需要3分钟
本篇作者:BlueDamage同学

全网爬取近5000部手机并进行数据分析,是一个非常有趣的小项目,前面我们已经写了一篇对这个项目的整体介绍(厉害了!实战爬取全网5000部手机|上篇),今天把最精彩的爬虫部分和代理部分给大家讲一下,非常感谢BlueDamage同学的精彩投稿

1.爬虫代理类

很多网站都有反爬虫的策略,所以对每一个网站如何绕过反爬虫是一个头疼的问题,我们的目标网站“中关村在线”还好,只需要事先构造一个用户代理池,用代理池里面的UA内容去伪装不同的头,去请求网页就行

1).目标网站的User-Agent

我们点开一个手机的网页链接,然后进行分析,主要查看Host和User-Agent的信息

2).提前准备一个用户代理池

用户代理池甚至代理IP,网上免费的有很多,但是好不好用,稳不稳定就不好说了,这里我们用提前准备了一个User-Agent list


3).核心代码

首先构建一个专门处理代理的类,构造一个header字典变量,'Host','Referer','Connetion'就是上面网页里面的内容,'User-Agent'是动态变量,需要从代理池里面不断的获取


2.爬虫类

爬虫部分其实还是跟前面讲过的例子类似,下面把主要的几点讲一下
1).一共108个页面,循环爬取,一个页面一个页面去爬
比如:页面url的获取,打开第2页, 移动鼠标至第3页


通过上图可以发现, 第N页的url应是
http://detail.zol.com.cn/cell_phone_index/subcate57_0_list_1_0_1_2_0_N.htm
2).接着采集每一个手机页面数据,找到手机块所在的标签
3).接着获取当前手机页面信息页面,点评子页面和参数子页面

分析的过程和上面非常类似,限于篇幅我就不展开详述.具体可以看细细的看一下源码


3.断点续爬

1).一般稍微大一点的爬虫程序都会考虑断点续爬的问题
特别是当数据量成千上万的时候,不可能每次都重头再来爬取.这里BlueDamage同学用了一个非常巧妙的方法,来处理这个问题:

4.数据分析

我们作了这么多步骤,其实就是为了数据分析,下面我们看看部分的数据分析的结果(数据爬取自zol手机, 某些分析定会有出入, 勿介意)

1).2015-2017年, 好评数/差评数最多的是哪款手机, 哪几款品牌?



2).2016-2017年出的手机中, 目前平均售价最高/低的是哪几个品牌?


结论

好,全网爬取近5000部手机下篇就讲道这里,我对原文进行了修改和重新排榜.这个项目还是非常有趣的,非常感谢BlueDamage同学的投稿,源码写的非常精彩,思路非常清晰,上面几个图有几个地方写的非常简洁,不知道细心的同学有没有发现,如果需要源码的同学请留言

关注微信公众号“菜鸟学python”,获得更多免费电子书和源码资料

上一篇 下一篇

猜你喜欢

热点阅读