Python开发简单爬虫--学习笔记
2018-06-17 本文已影响298人
whoami2019
一、概述
目标
掌握开发轻量级爬虫
内容
- 爬虫简介
- 简单爬虫架构
URL管理器
网页下载器(urllib2)
网页解析器(BeautifulSoup) - 完整实例:爬取百度百科雷军词条相关的1000个页面数据
tips: 轻量级爬虫:抓取无需登录的静态页面
复杂爬虫:抓取需要登录或者要Ajax异步加载等复杂场景的页面
二、爬虫的简介及爬虫技术价值
2.1、什么是爬虫
一段自动抓取互联网信息的程序,可以从一个URL出发,访问它所关联的URL,提取我们所需要的数据。也就是说爬虫是自动访问互联网并提取数据的程序。

2.2、爬虫的价值

三、简单的爬虫架构

爬虫调度端
用来启动、执行、停止爬虫,或者监视爬虫中的运行情况 在爬虫程序中有三个模块URL管理器:对将要爬取的URL和已经爬取过的URL这两个数据的管理
网页下载器
将URL管理器里提供的一个URL对应的网页下载下来,存储为一个字符串,这个字符串会传送给网页解析器进行解析
网页解析器
一方面会解析出有价值的数据,另一方面,由于每一个页面都有很多指向其它页面的网页,这些URL被解析出来之后,可以补充进URL管理 器
这三部门就组成了一个简单的爬虫架构,这个架构就能将互联网中所有的网页抓取下来

四、URL管理器及三种实现方式


为啥需要URL管理器?
因为因为要爬取的页面中有指向其他页面的URL,而其他URL也有指向当前页面的URL,这就可能会导致重复抓取和循环抓取,所以URL管理器就是用来防止重复和循环抓取问题的
五、网页下载器和urlib模块
本文使用urllib实现。urllib2是python自带的模块,不需要下载,urllib2在python3.x中被改为urllib.request。
三种实现方式



六、网页解析器和BeautifulSoup第三方模块



本文的解析器用BeautifulSoup模块,先测试验证模块是否已安装

Beautiful Soup
相比其他的html解析有个非常重要的优势。html会被拆解为对象处理。全篇转化为字典和数组。相比正则解析的爬虫,省略了学习正则的高成本,本文使用python3.x系统自带不需要安装。

方法介绍



七、爬虫开发实例(目标爬虫百度百科)

在编写代码前,先谈谈确定目标与分析目标两个步骤
确定目标
确定抓取哪个网站哪个网页的哪部分数据。该实例要抓取百度百科雷军词条页面以及它相关词条页面的标题和简介。
分析目标
也就是抓取的策略,包含三部分。
URL格式
限定目标的范围,不然会抓取到很多不相关的页面。通过审查元素可知该实例的URL格式是http://baike.baidu.com/item/{标题}
数据格式
本实例中就是分析所有词条中标题和简介所在标签的格式。通过审查元素得标题元素为 :class="lemmaWgt-lemmaTitle-title",简介元素为:class="lemma-summary"
网页的编码
要知道网页的编码才能够正常解析,不然乱码就解析不。通过审查元素网页的编码是UTF-8
编写代码







八、总结
这是本人学习的笔记,还有附带做的实验。个人感觉Python用起来确实比较方便,因为自带模块和第三方模块很多,实验过程中有2个地方栽了坑,第一个是类的初始化函数init, 因为_写成中文了,导致没有调用init,可是在这一步又没有报错,后面的代码才报错,另一个地方就是代码缩进问题导致报红叉,由此可知Python是一种严格按照缩进解析的语言。