Rumah  >  Artikel  >  pembangunan bahagian belakang  >  网络爬虫如何做才算好?

网络爬虫如何做才算好?

PHP中文网
PHP中文网asal
2017-06-20 16:23:321680semak imbas

网络爬虫的实质,其实是从网络上“偷”数据。通过网络爬虫,我们可以采集到所需要的资源,但是同样,使用不当也可能会引发一些比较严重的问题。

因此,在使用网络爬虫时,我们需要做到“盗亦有道”。

网络爬虫主要分为以下三类:

1. 小规模,数据量小,爬取速度不敏感;对于这类网络爬虫我们可以使用Requests库来实现,主要用于爬取网页;

2. 中规模,数据规模较大,爬取速度敏感;对于这类网络爬虫我们可以使用Scrapy库来实现,主要用于爬取网站或系列网站;

3. 大规模,搜索引擎,爬取速度关键;此时需要定制开发,主要用于爬取全网,一般是建立全网搜索引擎,如百度、Google搜索等。

在这三种中,我们最为常见的是第一种,大多数均是小规模的爬取网页的爬虫。

对于网络爬虫,也有很多反对声音。因为网络爬虫会不停的向服务器发出请求,影响服务器性能,对服务器产生骚扰行为,并加大了网站维护者的工作量。

除了对服务器的骚扰外,网络爬虫也有可能引发法律风险。因为服务器上的数据有产权归属,如果将该数据用于牟利的话,将会带来法律风险。

此外,网络爬虫也可能会造成用户的隐私泄露。

简而言之,网路爬虫的风险主要归于以下三点:

  • 对服务器的性能骚扰

  • 内容层面的法律风险

  • 个人隐私的泄露

因此,网络爬虫的使用需要有一定的规则。

在实际情况中,一些较大的网站都对网络爬虫进行了相关限制,整个互联网上也将网络爬虫视为可规范的功能来看待。

对于一般的服务器来讲,我们可以通过2种方式来限制网络爬虫:

1. 如果网站的所有者有一定的技术能力,可以通过来源审查来限制网络爬虫。

来源审查,一般通过判断User-Agent来进行限制,本篇文章着重介绍第2种。

2. 通过Robots协议来告诉网络爬虫需要遵守的规则,哪些可以爬取,哪些是不允许的,并要求所有的爬虫遵守该协议。

第2种是以公告的形式告知,Robots协议是建议但非约束性,网络爬虫可以不遵守,但可能会存在法律风险。通过这两种方法,互联网上形成了对网络爬虫的道德和技术上的有效限制。

那么,我们在编写网络爬虫时,就需要去尊重网站的维护人员对网站资源的管理。

互联网上,部分网站没有Robots协议,所有数据都可以爬取;不过,绝大多数的主流网站都支持Robots协议,有做相关限制,下面就具体介绍下Robots协议的基本语法。

Robots协议(Robots Exclusion Standard,网络爬虫排除标准):

作用:网站告知网络爬虫哪些页面可以爬取,哪些不行。

形式:在网站根目录下的robots.txt文件。

Robots协议的基本语法:*代表所有,/代表根目录。

比如,PMCAFF的Robots协议:

User-agent: *

Disallow: /article/edit

Disallow: /discuss/write

Disallow: /discuss/edit

第1行中User-agent:*,是指所有的网络爬虫都需要遵守如下协议;

第2行中Disallow: /article/edit,是指所有的网络爬虫都不允许访问article/edit下的内容,其他同理。

如果观察京东的Robots协议,,可以看到下面有User-agent: EtaoSpider,Disallow: /,其中EtaoSpider是恶意爬虫,不允许其爬取京东的任何资源。

User-agent: *

Disallow: /?*

Disallow: /pop/*.html

Disallow: /pinpai/*.html?*

User-agent: EtaoSpider

Disallow: /

User-agent: HuihuiSpider

Disallow: /

User-agent: GwdangSpider

Disallow: /

User-agent: WochachaSpider

Disallow: /

有了Robots协议后,可以对网站的内容做个规范,告诉所有的网络爬虫哪些可以爬取,哪些不允许。

需要特别注意的是,Robots协议都是存在根目录下的,不同的根目录可能Robots协议是不一样的,在爬取时需要多加留意。

Atas ialah kandungan terperinci 网络爬虫如何做才算好?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn