爬虫那些事儿-- 简介

   从事爬虫相关的工作已经两年多了。简要做下总结。

爬虫(Crawler),有些也叫蜘蛛(Spider),用来从互联网下载网页。是搜索引擎的重要组成。爬虫是搜索引擎的数据来源,是数据的入口。爬虫的基本思想是认为整个互联网类似于一个交错的蜘蛛网。在互联网中每个网页都可以通过url访问。任何一个网页都会被互联网中的其他一些网页所指向(即其他页面中包含该页面的url链接)。而几乎每个网页都存在一些指向其他网页的链接。我们可以通过初始的若干URL开始,获取这些URL,并从这些URL对应的网页中发现新的URL,然后获取新的URL对应的页面,通过不断的执行该过程,可以遍历整个互联网(即发现互联网上所有的URL并获取所有的页面)。虽然对于庞大的互联网来说,访问互联网上全部的url是不现实的。但是该理论指引了我们爬虫的工作。爬虫可以基于该理论工作,从而获取互联网上绝大多数我们希望获取的url。

在实际的工作中,爬虫中需要考虑的主要问题如下

  • 爬取哪个页面的选择策略:

互联网可谓是世界上最大的“垃圾场”,互联网上的网页繁多,每日互联网上都产生上百亿的新增页面。我们按照100亿的网页,每个页面20KB来计算,100亿的网页约为200TB的大小。抓取这些数据需要的网络带宽为200*1000GB/86400 = 2.3GB,即至少需要18Gbps的网络带宽。因此想要全部抓取是不可能的。就需要有选择的抓取。而选择那些页面进行抓取就是首先需要考虑的一个问题。这里一般主要考虑的问题就是如何选择优质的页面去爬虫以及如何尽量避免重复爬取。

  • 检测页面变化的重访策略:

搜索引擎会对爬虫爬取的网页建索引,然后用户就可以使用搜索引擎检索所需的内容从而获取到对应网页的URL。而由于互联网是动态的,互联网中的网页是变化的。所谓的页面变化主要分为两种,更新和删除。更新是指页面的内容改变了,即url还在,而对应的网页的内容改变了。删除是指url对应的网页已经无效了。即不存在了(即称之为死链)。因此,爬虫就需要感知网页的变化。而感知网页变化的途径就是通过对网页进行重访。通过上面的介绍我们知道由于不可能访问互联网全部的网页,因此爬虫的爬取资源是有限而珍贵的。把所有已经爬取的页面都拿去不断的重访来判断变化是一种明显的浪费。因此我们就需要设计我们的重访策略。所谓的重访策略包括选择那些页面去重访以及间隔多久去重访两部分的问题。

  • 避免站点压力过大的礼貌策略

由于网页站点的服务器主要目的是提供用户访问的。而站点的服务器受限于机器的配置和网络资源,能容忍的访问频次是有限的。当访问较频繁时,则会造成服务器压力过大,从而无法响应请求。轻则影响正常用户的访问,重则可能导致web服务器的瘫痪。因此,为了能获取站点的数据又尽量造成对服务器的压力。爬虫爬取站点数据时需要礼貌的访问,即以站点可以接受的频次来访问站点数据。同时在现实中,一些服务器为了避免爬虫的频繁访问会设置一些限制,当爬虫访问的频次超过其设置时,有些通过采取弹窗输入验证码来区分人为行为和爬虫(目前的大部分爬虫还不能做到像人那样识别弹出窗口的验证码并输入)。有些则拒绝爬虫的响应(针对爬虫的访问返回404,503等返回码)。遇到这样的情况爬虫都无法正常的获取到所需的内容。同时由于不同的站点站点规模不同、用户访问量不同,使用的机器配置不同,其容忍的访问频次和设定的访问频次不尽相同,而站点不会主动对爬虫提供自己能容忍的站点压力,因此对爬虫来说,避免站点压力过大的礼貌策略是一个较大的难题。

  • 分布式抓取协作的并行策略

由于互联网网页数据是海量的。即使只抓取其中的部分,需要抓取的网页也是较多的。此时通过单台机器完成网页的抓取是不太可能的。互联网网页的平均大小为20KB左右。一个100Mbps的带宽一天能抓取的网页数约为

100*1000/20*86400 = 54000000。多机器的分布式抓取协作是一种必然的模式。因此需要处理分布式抓取的并行问题。

refer:http://en.wikipedia.org/wiki/Web_crawler

转载于:https://www.cnblogs.com/lovemdx/p/3189828.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android模拟机新闻APP,DavidTGNewsProject

DavidTGNewsProject##【Android】最新主流新闻app功能实现。仿网易,搜狐等新闻客户端(原创作品,转载请说明出处)先给大家看一下效果图:这个项目总体来说虽然不是特别难,但是确实非常常用的功能。是业余时间自己写的一个小项目。以前我们写的时…

轻操作动作休闲单机游戏《狂斩三国2》评测

游戏类别:动作休闲单机游戏时隔一年,曾在国内和台湾手游市 场获得top1佳绩的《狂斩三国》再度归来!其策略加动作的独特玩法在当时颠覆了玩家们对三国游戏的阵营认知。比传统策略更简单明快,比传统动作无脑砍更 具思考乐趣&#xf…

物联网简介

以下内容源于朱有鹏老师课程的学习整理,如有侵权,请告知删除。 本文档提供下载:提取码1111——物联网简介 1、什么是物联网 1.1.物联网的概念和发展历程 1.1.1、认识物联网 (1)百度百科中物联网定义 (…

php计算代码运行时间与内存使用的一段代码

计算运行时间及内存使用&#xff0c;代码如下&#xff1a; <?php //开始计时 $HeaderTime microtime(true);//参数true表示返回浮点数值//代码//...printf(" total run: %.2f s<br>". "memory usage: %.2f M<br> ", microtime(true)-$Hea…

Mysql语句与应用

2019独角兽企业重金招聘Python工程师标准>>> 1。正则表达式 搜索多个关键词&#xff0c;“或”, 等同 %上海% | %内蒙古% SELECT * FROM analysis_result WHERE result REGEXP 上海|内蒙古 LIMIT 1; "且" SELECT * FROM analysis_result WHERE id 1 AND …

android gb2312 utf-8,不同编码页面之间用form传值出现乱码问题解决方案 utf-8 到 gb2312...

相信有人也曾遇到过这种问题&#xff0c;今天将这个问题稍作整理发布出来。由于编码的问题传值出现乱码&#xff0c;一看到这样的情况&#xff0c;我们首先想到的是线面的两种解决办法&#xff1a;方案一&#xff1a;在接收参数页面进行转码 (这是较为理想的解决办法)方案二&a…

颜色的数字化描述(RGB与YUV的简介)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;YUV和RGB的相互转换实验_Geek.Fan的博客-CSDN博客 &#xff08;2&#xff09; 工作中用到的一些基础知识 &#xff08;3&#xff09;YUV422 YUV420 Planar \ Se…

android界面的滑动切换功能

左右滑动切换是几乎所有应用中都会用到的功能。在这里将相关资源进行总结 &#xff08;1&#xff09;viewflipper结合手势检测进行左右滑动。 http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html 这种方法很简单&#xff0c;但是大概效果不是很理想&#xff08…

softlayer virtual machine vhd磁盘镜像导入shell脚本

softlayer virtual machine vhd磁盘镜像导入shell脚本 脚本 测试上传; 20480 records in20480 records out2147483648 bytes (2.1 GB) copied, 44.2262 s, 48.6 MB/scurl: option --data-binary: out of memorycurl: try curl --help or curl --manual for more information 28…

android listview中item倒计时,GitHub - TangAnna/ListViewTimer: 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)...

ListViewTimer列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)项目中有时会遇到列表中含有倒计时或者是计时器的需求&#xff0c;实现的方式有很多种&#xff0c;此Demo中是使用Thread Handler实时的对item的局部进行刷新达到计时或倒计时的功能本项目中实现的是计…

Linux 查看当前日期和时间

一、查看和修改Linux的时区 1. 查看当前时区 命令 &#xff1a; "date -R" 2. 修改设置Linux服务器时区 方法 A 命令 &#xff1a; "tzselect" 方法 B 仅限于RedHat Linux 和 CentOS 命令 &#xff1a; "timeconfig" 方法 C 适用于Debian 命令 &…

第二季1:MPP模块概述

以下内容源于海思官方文档内容&#xff0c;如有侵权请告知删除。 一、MPP模块概述 海思的媒体处理软件平台&#xff08;MPP&#xff0c;Media Process Platform&#xff09;有利于应用软件的快速开发。因为该平台屏蔽了一些与芯片相关的复杂的底层处理&#xff0c;给应用软件提…

codeblocks

用来写c的 http://www.codeblocks.org/downloads/26#windows 选择codeblocks-13.12mingw-setup.exe自带gnu gcc compiler 安装后设置gcc compiler settings -> compiler -> 在顶上的selected compiler中选择gnu gcc compiler -> 选择下面一行的toolchain executables中…

小米平板安装鸿蒙系统,【新机】安卓最强平板?MatePad Pro2曝光:预装鸿蒙OS | 小米平板5到底啥时候发布?...

目前安卓阵营还在好好做平板的可能也就是三星和华为了&#xff0c;至少整体的配置规格都还不错。根据爆料&#xff0c;华为将会在近期推出MatePad Pro 2代产品&#xff0c;预计6月份正式和大家见面。MatePadPro2将会搭载麒麟9000处理器&#xff0c;算是目前安卓平板里性能最强的…

第二季3:sample_venc.c的整体分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、sample文件夹的介绍 将mpp/sample文件夹以及mpp/include文件夹导入SI后&#xff0c;搜索main时可以发现很多main函数。这说明sample文件夹下有很多例程&#xff0c;每个例程面向一个典型应用。…

〖Linux〗穿越城墙之后,直接连接国内网站的路由配置

因为有需要做Android相关的开发工作&#xff0c;很多时候要穿越之后才能做事情&#xff1b; 如Android文件加密预研、Android NDK/SDK的下载&#xff0c;都需要使用得到Google&#xff1b; 但是穿越之后&#xff0c;访问国内网站就不是那么方便了&#xff0c;所以&#xff0c;写…

android自动化持续集成,Android系统的持续集成自动化测试框架的研究与实践

摘要&#xff1a;近几年,Android系统占据着智能移动设备操作系统领域中极大的市场份额。随着Android市场中软件数量的不断攀升,移动用户对Android应用的质量要求也越来越高。如何保证Android软件的质量,成为移动应用领域中亟待解决的问题。重视移动应用的测试工作,是提高Androi…

poj 2891 Strange Way to Express Integers

题目&#xff1a;http://poj.org/problem?id2891 思路&#xff1a;扩展欧几里得 #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; #define maxn 100010 int n; long lo…

第二季4:SAMPLE_VENC_1080P_CLASSIC函数的总流程

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 函数SAMPLE_VENC_1080P_CLASSIC()有七个大步骤。 step 1: init sys variable&#xff0c;即初始化&#xff08;填充&#xff09;mpp系统的变量、参数。 step 2: mpp system init&#xff0c;即初始化…

读书笔记2014第13本:《富爸爸,穷爸爸》

早就收藏了《富爸爸&#xff0c;穷爸爸》这本书&#xff0c;一直没看&#xff0c;最近仔细翻看一遍&#xff0c;发现自己智商一般&#xff0c;情商不行&#xff0c;原来财商更差&#xff0c;连书里的穷爸爸也比不上。这本书在这个时代再看&#xff0c;已经跟不上形势的发展了&a…