首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

网络爬虫详解:原理、工作流程及爬取策略(三)

在上篇文章中,企通查对网络爬虫的爬行策略、网站更新策略进行了介绍(上篇内容回顾:网络爬虫详解:原理、工作流程及爬取策略(二))。

——

我们知道爬虫在对网页进行爬取时,必然需要访问对应的网页,正规的爬虫一般会告诉该网页的网站站长其爬虫身份,网站管理员就可以通过爬虫告知的信息对爬虫身份进行识别,这个过程就是爬虫的身份识别过程。

那么,爬虫是如何告知网站站长自己的爬虫身份的呢?

通过上篇文章中爬虫网站的更新策略我们知道,如果爬虫对目标网站爬取过于频繁,会对网站服务器产生一定的压力。假如在爬取某一个站点时爬虫陷入死循环,就会造成该站点的服务压力过大。

如果有正确的身份设置,那么该站点的站长就可以想办法联系到该爬虫方,然后停止对应的爬虫程序。

目前有两种主流方法用来协定告知爬虫哪些内容是不允许爬取的:爬虫禁抓协议和网页紧抓标记。

通常爬虫在对网页进行爬取访问的时候,会通过HTTP请求中的User Agent字段告知自己的身份信息。并在访问一个网站的时候,会首先根据该站点下的Robots.txt文件来确定可爬取的网页范围。

这里的Robots协议即爬虫禁抓协议,是需要网络爬虫共同遵守的协议,对于一些禁止的URL地址,网络爬虫不应进行爬取访问。

另一种方法网页禁抓标记一般会在网页的HTML代码里加入meta name="robots”标记,content字段指出允许或者不允许爬虫的哪些行为。

可以分为两种情形,一种是告知爬虫不要索引该网页内容,以noindex作为标记;另外一种情形是告知爬虫不要抓取网页所包含的链接,以nofollow作为标记。

通过这两种方式,都可以在一定程度上达到对网页内容的一种隐私保护。

当然,有些爬虫为了获取部分额外数据,会铤而走险伪装成其他爬虫或浏览器去爬取网站,更有甚者会无视Robots协议的限制任意爬取。

但对于这些行为是不提倡的,虽然从技术的角度来说实现起来并不难,但只有爬虫方和站点服务方共同遵守良好的网络规则,才能达到双赢。

——

通过前边的介绍,相信大家已经对爬虫的基本理论知识有了比较全面的了解,那么如果想开发自己的网络爬虫,可以使用哪些语言呢?

能够开发爬虫的语言很多,常见的有:

Python:简单易学、代码简洁,爬虫框架丰富,对多线程任务的处理能力较强。

Java:较适合开发大型爬虫项目。

PHP:代码简洁,模块较丰富,后端处理较强,但并发能力相对来说较弱。

Node.JS:能够支持高并发与多线程处理。

C++:运行速度快,适合开发大型爬虫项目,但成本较高。

Go语言:同样高并发能力非常强。

选定语言后,怎样才能从零开始构建一个成熟的网络爬虫解决方案呢?关注本公众号并后台回复关键词python爬虫,即可免费获得《Python网络数据采集》电子版网盘下载链接~

——

如何判定自己写的爬虫是否优秀呢?针对不同的应用目的来说,优秀的爬虫定义可能不尽相同,实现方式也各有差异,但大体都会具备以下特性:

1.高性能

前边我们也提到过,互联网的网页数量是海量的,所以爬虫的性能至关重要,这里的性能主要是指爬虫下载网页的抓取速度。

常见的判定方式是以爬虫每秒能够下载的网页数量作为性能指标,单位时间内能够下载的网页数量越多,其性能就越高。

2.可扩展性

即使单个爬虫的性能很高,要想将所有爬取的网页都下载成功仍需要相当长的时间周期。

因此为了能尽可能缩短抓取周期,爬虫系统应该有较好的可扩展性,即能够通过增加抓取服务器和爬虫数量来达到目的。

一个实用的大型网络爬虫一定是分布式运行的,即多台服务器专做抓取,每台服务器部署多个爬虫,每个爬虫多线程运行,通过多种方式增加并发性,这对提高爬虫系统的整体性能是很有帮助的。

3.健壮性

爬虫在访问各种类型的网站服务器期间,可能会遇到很多种异常情况,例如网页HTML编码不规范、被抓取服务器突然死机,或者爬虫陷阱等,爬虫对各种异常情况如何处理就显得非常重要。

换个角度讲,假设爬虫程序在抓取过程中死掉,或者爬虫所在的服务器宕机,健壮的爬虫应能做到再次启动爬虫时,能够恢复之前抓取的内容和数据结构,而不是每次都需要把所有工作完全从头做起,这也是爬虫健壮性的一种体现。

4.友好性

爬虫的友好性含义有两方面:一是保护网站的部分私密性,二是减少被抓取网站的网络负载。

从保护私密性的角度来考虑,对于网站所有者来说,有些内容并不希望被所有人搜到,所以需要设定协议,来告知爬虫哪些内容是不允许抓取的。一般来说,能够遵循本文一开始介绍的爬虫禁抓协议和网页禁抓标记可以被认为是友好的。

从减少被抓取网站的网络负载角度来考虑,爬虫一般会根据网页的链接连续获取某网站的网页,如果爬虫访问网站频率过高,会给网站服务器造成很大的访问压力,有时候甚至会影响网站的正常访问,造成类似DOS攻击的效果,为了减少网站的网络负载,友好性的爬虫应该在抓取策略部署时考虑每个被抓取网站的负载,在尽可能不影响爬虫性能的情况下,减少对单一站点短期内的高频访问。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201208A0DXQC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券