目录
为了更好地在爬虫编写上获得更好地效果,现有必要在爬虫的知识上进行补充,本文将在
- 爬虫相关协议
- 爬虫架构
上进行一定的解释
爬虫相关协议
- Robots协议
作为一个爬虫程序,在爬取互联网资源时会对对方服务器的资源进行一定量的消耗,特别是多线程爬虫,在爬取网站资源时会使用很多Session进行连接,这个行为在一定程度上很容易导致网站瘫痪,还有就是有些网站有着自己不想让人访问的页面,如果爬虫随意进行抓取,相当于侵犯了网站的隐私。针对这种现象,互联网行业主要采取了两种办法来进行防范:- 在网站更目录下放置robots.txt文件来规定哪些文件不想被抓取以及哪些爬虫不允许运行。
robots.txt文件主要包含两块内容:User-agent和Disallow.
User-agent主要规定了后续的disallow规则适用于何种爬虫,如果User-agent的值被设为*,那就意味着改disallow适用于所有的爬虫
Disallow的内容为网站创建者不愿意让爬虫爬取的页面如果Disallow后面的内容为简单的\,那就意味着网站不允许爬虫爬取所有的网页。
一个robots.txt例子为
- 在网站更目录下放置robots.txt文件来规定哪些文件不想被抓取以及哪些爬虫不允许运行。
User-agent:Baiduspider
Allow:/
Disallow:/w?
User-agent:Googlebot
Allow:/
User-agent:MSNBot
Allow:/
User-agent:*
Disallow:/
- Robots Meta
除了在根目录下创建robots.txt,我们也可以在网页源代码中的head标签页中专门告诉爬虫如何来抓取网页内容
robots meta主要有两种内容:name和content。name用来规定后面的content适用于何种爬虫,例如name="Robots"表示后续的content内容适用于所有的爬虫。Content部分主要分为4个指令选项:INDEX, NOINDEX, FOLLOW, NOFOLLOW.
INDEX指令将告诉爬虫要抓取该页面
FOLLOW指令将告诉爬虫可以沿着页面上的链接继续抓取下去
如此看来,对于同一种爬虫,它将面临4种不同的情况:
<META NAME="ROBOTS" CONTENT="INDEX,FOLLOW"> \\也可以写成<META NAME="ROBOTS" CONTENT="ALL">
<META NAME="ROBOTS" CONTENT="NOINDEX,FOLLOW">
<META NAME="ROBOTS" CONTENT="INDEX,NOFOLLOW">
<META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW"> \\也可以写成<META NAME="ROBOTS" CONTENT="NONE">
当然,我们的互联网领头大哥Google在这方面有着不同凡响的建树,现在的大部分爬虫对于Robots Meta的支持其实并不好,但Google完全支持该协议并且新增了一个新的指令archive,可以限制Google是否保留网页快照,例如:
<META NAME="googlebot" CONTENT="index,follow,noarchive">
这段指令意味着谷歌不能保留该页面的网页快照
爬虫架构
网络爬虫主要分为分布式爬虫架构以及垂直爬虫架构,看起来十分的高大上,但在仔细了解后发现这其实非常简单
- 分布式爬虫架构
所谓分布式,意思就是将一个大型任务分配到不同人头上,例如北京的爬虫爬取距离自己最近的节点——北京,上海的爬虫爬取距离自己最近的节点——上海,也可以这样分配:电信网络的爬虫爬取托管在电信网络中的网站,联通网络的爬虫爬取托管在联通网络中的网站。一般来讲,这样的爬虫结构都会有一个主控服务器,假如一个爬虫在爬取时遇到了不属于自己任务范围内的网站,它将会上报该网站至主控服务器,然后主控服务器会将该网站重新分配至应该为此负责的爬虫上,同时,为了防止一个爬虫宕机,一般会设置一个镜像爬虫共同爬取同一个网站。 - 垂直爬虫架构
看完了分布式,我相信理解垂直爬虫结构也不算什么难事,就是对同一个网站站点进行深层的挖掘,垂直爬虫的功能主要分为:- 从首页提取不同栏目的列表页
- 将网页进行分类
- 提取网页列表中的链接,例如大多数网页都有的翻页,http://…&_pgn=2中的“_pgn”就为翻页参数
- 详细内容的提取,也就是网页正文内容