python概述
爬虫一直是跟大数据关系比较密切的,大数据就是对海量数据处理的一些方式,包含对海量数据如何采集。以前对于数据的采集是通过日志的方式来进行。而在现在的移动互联时代,面对大量数据,我们如何去拿到我们想要的内容。灵感就来自于爬虫。爬虫在我们身边一直存在,搜索引擎本身就属于爬虫。最早的搜索引擎就是数据库关系建立的,随着数据规模越来越大,发现仅依靠数据库是不行的,搜索引擎诞生之后,发现数据太多了,而且为了迎合大众,必须去不断的收集这些信息。而实际上,最早遇到大数据难题的就是搜索引擎(雅虎、谷歌、百度等)。搜索引擎为了大量的自动化的去采集数据,所以编写了爬虫。
爬虫,应该称为网络爬虫,也叫网页蜘蛛、网络机器人、网络蚂蚁等。
搜索引擎,就是最早的网络爬虫的应用者。大多数网站提供的数据必须自动采集,大多数网站提供的内容也必须自动更新,这是它的主要工作内容。那对于爬出来的数据如何处理,存放在传统的数据库中是否合适,是否可以放在日志中处理,存放多大的空间,在早期的时候处理海量数据是搜索引擎的难题。爬虫只是解决了数据采集的难题,而数据如何存储,数据如何处理,数据如何查询这才是真正需要考虑的东西。
为什么到了今天,反而这个词汇被频繁的提起呢?有搜索引擎不就够了吗?实际上,大数据时代的到了,所有的企业都希望通过海量数据发现其中的价值。所以,需要爬取对特定网站、特定类别的数据,而搜索引擎不能提供这样的功能,因此,需要自己开发爬虫来解决。
爬虫分类
通用爬虫
常见就是搜索引擎,无差别的收集数据、存储,提取关键字,构建索引库,给用户提供搜索接口。
爬取一般流程
1、初始一批URL, 将这些URL放到待爬取队列
2、从队列取出这些URL, 通过DNS解析IP, 对IP对应的站点下载HTML页面, 保存到本地服务器中, 爬取完的URL放到已爬取队列。
在搜索引擎中有文字必须全部爬取,然后对这些文字进行处理,即建立索引,我们一般称为倒排索引,其实就是通过索引来找文档。我们对爬取的内容是什么样的形式并不关心,但是需要注意,中文与拉丁字母是不一样的,中文中除了标点符号这些断字断句之外,语义上是不间断的,与英文不一样,不间断即为一个单词。中文必须要进行分词处理。然后我们就可以下载这个html页面了,即在浏览器中把拓扑树解析了,所有的文本内容迭代出来,然后获取得到。爬取的内容需要保存到本地服务器当中, 爬取完的URL放到已爬取队列。
3、分析这些网页内容, 找出网页里面的其他关心的URL链接, 继续执行第2步, 直到爬取条件结束。
在URL里面将链接提取出来之后,然后就能确定这个链接是指向哪个域名或者IP的,之后就可以进一步的将域名或者IP加入到待爬取队列当中。待爬取队列数据是在不断增加的,对于爬虫而言,则会不断地去迭代待爬取队列,对URL所对应的的内容进行提取,之后对内容进行存储、归档、分析,判断是否有新的URL链接,然后周而复始。
搜索引擎如何获取一个新网站的URL
- 新网站主动提交给搜索引擎
- 通过其它网站页面中设置的外链
- 搜索引擎和DNS服务商合作, 获取最新收录的网站
聚焦爬虫
有针对性的编写特定领域数据的爬取程序,针对某些类别数据采集的爬虫,是面向主题的爬虫(爬取体育版的内容,娱乐版的内容)。
聚焦爬虫的爬取流程跟通用爬虫的爬取流程是一样的。
Robots协议
指定一个robots.txt文件, 告诉爬虫引擎什么可以爬取。
我们以下面为例,截取部分做说明。
淘宝 http://www.taobao.com/robots.txt
User-agent
在网站中是非常重要的,可以对用户类别的分析,浏览器的分析等,对于爬虫来讲,需要告知是什么类型的爬虫,例如:Baiduspider
则必须要遵守下面所描述的约定。允许爬取什么内容,不允许爬取什么内容,需要去遵守。
淘宝首页所带的搜索框是没有爬虫的搜索引擎,而是把所有商品的类目用来建立一个索引库。
对于Googlebot
相对可以爬取的内容就比较多一点。对于某些网站来讲,是欢迎搜索引擎的。
Bingbot
允许搜索的内容和Googlebot
一样。
Yahoo
中可以爬取的内容相较于上面两个而言,是比较少一点的。
User-Agent
是其他的意思,其他搜索引擎是不允许爬取的。
我们再来看一下马蜂窝的robots协议:
马蜂窝:http://www.mafengwo.cn/robots.txt
User-agent:*
代表通用。也就是说所有的搜索引擎都必须遵守下列的协议。
马蜂窝上面所列都不允许去爬取。
其它爬虫,不允许爬取
User-Agent:*
Disallow:/
如果需要知道网站的内容信息,需要去Sitemap
查看。
在网站提供了友好的访问方式的情况下,我们实际上是可以不去爬取那些不被允许爬取的内容的,但是如果站点信息并没有提供,那么我们可以根据robots来知道关键数据在哪(一般不建议)。
robots协议是一个君子协定,“爬亦有道”。
这个协议为了让搜索引擎更有效率搜索自己内容, 提供了如Sitemap这样的文件。这个文件禁止抓取的往往又是可能我们感兴趣的内容,它反而泄露了这些地址。
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站