0 介绍
在互联网这个复杂的环境中,搜索引擎本身的爬虫,出于个人目的的爬虫,商业爬虫肆意横行,肆意掠夺网上的或者公共或者私人的资源。显然数据的收集并不是为所欲为,有一些协议或者原则还是需要每一个人注意。本文主要介绍关于爬虫的一些理论和约定协议,然后相对完整完成一个爬虫的基本功能。
1 协议
一般情况下网站的根目录下存在着一个robots.txt的文件,用于告诉爬虫那些文件夹或者哪些文件是网站的拥有者或者管理员不希望被搜索引擎和爬虫浏览的,或者是不希望被非人类的东西查看的。但是不仅仅如此,在这个文件中,有时候还会指明sitemap的位置,爬虫可以直接寻找sitemap而不用费力去爬取网站,制作自己的sitemap。那么最好我们看个具体的例子吧,这样更有助于理解robots协议:
-----------------------以下时freebuf的robots.txt-------------
User-agent: *
Disallow: /*?*
Disallow: /trackback
Disallow: /wp-*/
Disallow: */comment-page-*
Disallow: /*?replytocom=*
Disallow: */trackback
Disallow: /?random
Disallow: */feed
Disallow: /*.css$
Disallow: /*.js$
Sitemap: http://www.freebuf.com/sitemap.txt
大家可以看到,这里指明了适用的User-agent头,指明了Disallow的目录,也指明了sitemap,然后我们在看一下sitemap中是什么:
我们大致可以发现这些都是整个网站允许公开的内容,如果这个爬虫作者是对freebuf的文章感兴趣的话,大可不必从头到尾设计爬虫算法拿下整个网站的sitemap,这样直接浏览sitemap节省了大量的时间。
2 原则
如果协议不存在的话,我们仍然不能为所欲为,上网随意搜索一下源于爬虫协议的官司,国内外都有。爬虫的协议规则建立在如下的基础上:
1. 搜索技术应该服务于人类,尊重信息提供者的意愿,并维护其隐私权;
2. 网站也有义务保护其使用者的个人信息和隐私不被侵犯。
简单来说,就是构建的爬虫以信息收集为目的是没错的,但是不能侵犯别人的隐私,比如你扫描并且进入了网站的robots中的disallow字段,你就可能涉及侵犯别人隐私的问题。当然作为一般人来讲,我们使用爬虫技术无非是学习,或者是搜集想要的信息,并没有想那么多的侵权,或者是商业的问题。
3 确立目标与分析过程
这里我提供一个爬虫诞生要经历的一般过程:
1. 确立需求在,sitemap中挑选出需要挖掘的页面;
2. 依次分析挑选出的页面;
3. 存储分析结果。
但是有时候问题就是,我们的目标网站没有提供sitemap,那么这就得麻烦我们自己去获取自己定制的sitemap。
目标:制作一个网站的sitemap:
分析:我们要完成这个过程,但是不存在现成sitemap,笔者建议大家把这个网站想象成一个图的结构,网站的url之间纵横交错,我们可以通过主页面进行深度优先或者广度优先搜索从而遍历整个网站拿到sitemap。显然我们发现,我们首先要做的第一步就是完整的获取整个页面的url。
但是我们首先得想清楚一个问题:我们获取到的url是应该是要限制域名的,如果爬虫从目标网站跳走了,也就意味着将无限陷入整个网络进行挖掘。这么庞大的数据量,我想不是一般人的电脑硬盘可以承受的吧!
那么我们的第一步就是编写代码去获取整个页面的url。其实这个例子在上一篇文章中已经讲到过。
4 动手
我们的第一个小目标就是获取当前页面所有的url:
首先必须说明的是,这个脚本并不具有普遍性(只针对freebuf.com),并且效率低下,可以优化的地方很多:只是为了方便,简单实现了功能,有兴趣的朋友可以任意重构达到高效优雅的目的
import urllib
from bs4 import BeautifulSoup
import re
def get_all_url(url):
urls = []
web = urllib.urlopen(url)
soup =BeautifulSoup(web.read())
#通过正则过滤合理的url(针对与freebuf.com来讲)