搜索引擎中网络爬虫的设计分析

2023-10-28

 

搜索引擎中网络爬虫的设计分析
作者:Ackarlix
 
下面简单介绍一下搜索引擎的机器爬虫的制作和一些基本要注意的事项。
 
说的简单易懂一些,网络爬虫跟你使用的〖离线阅读〗工具差不多。说离线,其实还是要跟网络联结,否则怎么抓东西下来?那么不同的地方在哪里?
 
1】 网络爬虫高度可配置性。
2】 网络爬虫可以解析抓到的网页里的链接
3】 网络爬虫有简单的存储配置
4】 网络爬虫拥有智能的根据网页更新分析功能
5】 网络爬虫的效率相当的高
 
那么依据特征,其实也就是要求了,如何设计爬虫呢?要注意哪些步骤呢?
 
1】 url 的遍历和纪录
这点 larbin 做得非常的好,其实对于url的遍历是很简单的,例如:
 
 
cat [what you got]| tr /" //n | gawk '{print $2}' | pcregrep ^http://
 
 
就可以得到一个所由的 url 列表
 
2】多进程 VS 多线程
各有优点了,现在一台普通的PC 例如 booso.com 一天可以轻松爬下5个G的数据。大约20万网页。
 
3】时间更新控制
最傻的做法是没有时间更新权重,一通的爬,回头再一通的爬。
通常在下一次爬的的数据要跟上一次进行比较,如果连续5次都没有变化,那么将爬这个网页的时间间隔扩大1倍。
 
如果一个网页在连续5次爬取的时候都有更新,那么将设置的爬取时间缩短为原来的1/2。
 
注意,效率是取胜的关键之一。
 
4】爬的深度是多少呢?
看情况了。如果你比较牛,有几万台服务器做网络爬虫,我劝您跳过这一点。
如果你同我一样只有一台服务器做网络爬虫,那么这样一个统计您应该知道:
 
网页深度:网页个数:网页重要程度
0 : 1 : : 10
1 :20 : :8
2: :600: :5
3: :2000: :2
4 above: 6000: 一般无法计算
 
好了,爬到三级就差不多了,再深入一是数据量扩大了3/4倍,二是重要度确下降了许多,这叫做“种下的是龙种,收获的是跳蚤。
 
5】爬虫一般不之间爬对方的网页,一般是通过一个Proxy出去,这个proxy有缓解压力的功能,因为当对方的网页没有更新的时候,只要拿到 header 的 tag就可以了,没有必要全部传输一次了,可以大大节约网络带宽。
 
apache webserver里面纪录的 304 一般就是被cache的了。
 
6】请有空的时候照看一下robots.txt
 
7】存储结构。
这个人人见智,google 用 gfs 系统,如果你有7/8台服务器,我劝你用NFS系统,要是你有70/80个服务器的话我建议你用afs 系统,要是你只有一台服务器,那么随便。
 
给一个代码片断,是我写的新闻搜索引擎是如何进行数据存储的:
 
 
 
 
NAME=`echo $URL |perl -p -e 's/([^/w/-/./@])/$1 eq "/n" ? "/n":sprintf("%%%2.2x",ord($1))/eg'`
mkdir -p $AUTHOR
newscrawl.pl $URL --user-agent="news.booso.com+(+http://booso.com)" -outfile=$AUTHOR/$NAME
 
 
 
 
--------------------------------------------------------------------------------
 
 
以上转载的是一篇关于搜索引擎网络爬虫(即搜索引擎蜘蛛程序)的设计分析的文章,介绍了一些蜘蛛设计的常识,这些信息对SEO都很有帮助,特别是注意以下几句:
 
1.通常在下一次爬的的数据要跟上一次进行比较,如果连续5次都没有变化,那么将爬这个网页的时间间隔扩大1倍,如果一个网页在连续5次爬取的时候都有更新,那么将设置的爬取时间缩短为原来的1/2。
 
网页更新频度严重影响着搜索引擎蜘蛛程度对网站的爬行,爬取次数越多意味着网页收录几率会越大、收录数量越多,收录是SEO最基础的一个环节。
 
2.好了,爬到三级就差不多了,再深入一是数据量扩大了3/4倍,二是重要度确下降了许多,这叫做“种下的是龙种,收获的是跳蚤。
 
尽量将网站保持在三级目录内,深层次的网页会给搜索引擎带来很大的压力,当然,我想Google有足够的服务器来承担这些压力,但从侧面来说,3层目录下的网页被抓取及更新的频度要低很多。前面,我说过,要想办法使网站物理结构和逻辑结构吻合,这体现于URL的良好设计,现在你可以检查下前台生成的静态网页的实际目录有几层,考虑是否可以优化。
关于网站逻辑结构和URL设计,请参考“网站内部链接优化是SEO的第一要素”和“二级域名与一级目录之间该如何选择?”
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搜索引擎中网络爬虫的设计分析 的相关文章

  • 替代MySQL半同步复制,Meta技术团队推出MySQL Raft共识引擎

    作者 Anirban Rahut Abhinav Sharma Yichen Shen Ahsanul Haque 原文链接 https engineering fb com 2023 05 16 data infrastructure m
  • 关于突破SQL注入限制的新思路

    http www bitscn com network protect 200804 139215 html 突然想我们是否可以用什么方法绕过SQL注入的限制呢 到网上考察了一下 提到的方法大多都是针对AND与 号和 号过滤的突破 虽然有点
  • Mac电脑使用小技巧

    Mac OS很多操作与Windows还是有较大的区别 需要一段时间适应 因此我整理了Mac OS的实用小技巧 希望帮助刚入手Mac的小伙伴轻松上手 一 使用预览直接修改图片大小 在遇到需要修改图片的大小 大家的惯有思维就是用Photosho
  • C语言标准库函数qsort(快速排序函数)

    文章目录 一 函数原型 二 函数解析 比较函数 三 手写快排 四 使用qsort 1 对int数组排序 2 对double数组排序 3 对char数组排序 4 对字符串排序 1 char s 2 char s 5 对结构体排序 1 一级排序

随机推荐

  • 简单一行代码解决流读取导致StringBuilder.toString()乱码问题

    今天做上传功能代码读取返回值得时候 StringBuilder toString 出现乱码的情况 在网上找了一堆乱七八糟的办法 繁琐不说 代码还好几行 后来看到String类构造自己就有办法解决这个问题 简单一行代码搞定 在这里记录一下 S
  • 变分推断(Variational Inference)解析

    一 什么是变分推断 假设在一个贝叶斯模型中 x x x为一组观测变量 z z z为一组隐变量 参数也看做随机变量 包含在 z
  • Linux下的TCP&UDP通信作业

    题目描述 一 对于TCP传输 实现客户端发送某特定信息 字符时结束信息传输 断开连接 二 编写程序验证在同一台机器上TCP和UDP能不能同时占用同一个端口进行通信 开始编程 使用vim创建并编辑几个源文件 vim TCPserver c v
  • 由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序可能会解决此问题。

    出错情况如下 实在着不住了 那些不懂装懂的不要出来祸害人了 又是网上下载vcruntime140 dll放到c盘system32 64文件 这种做法纯属扯淡 vcruntime140 dll文件就是VC 2010的一个文件而已 直接下载运行
  • 序列化理解

    Java序列化 Java提供了一种对象序列化的机制 在该机制中 一个对象可以被表示为一个字节序列 该字节序列包含对象的数据 有关对象的类的信息和存储在对象中数据的类型 将序列化对象写入文件后 可以从文件中读取出来 对且对其进行反序列化 就是
  • 手把手教你配置Pytorch环境并使用(Win10系统下基于Anaconda完成的pytorch1.7.1和torchvision0.8.2的Pytorch深度学习环境搭建)

    概述 1 下载并安装Anaconda 2 在Anaconda Navigator中新建Pytorch虚拟环境 3 配置虚拟环境所需要的torch和torchvision 4 在Pycharm编译环境中使用刚刚建好的Pytorch虚拟环境 详
  • tensorflow兼容处理 tensorflow.compat.v1 tf.contrib

    20201130 问题提出 v1版本中tensorflow中contrib模块十分丰富 但是发展不可控 因此在v2版本中将这个模块集成到其他模块中去了 在学习tensorflow经常碰到tf contrib的代码 一敲就报错 import
  • ME28/ME2L/ME2N增强字段

    导语 用户希望在ME28采购订单审批的时候显示采购订单创建人以及描述 需要通过增强字段来实现 查询了一下SAP有标准的BADI可以进行增强 好像ME28 ME2L ME2N都是通过这里实现 使用不同的展示结构 这里没有深入测试其他事物 仅以
  • 终于弄明白 i = i++和 i = ++i 了

    作者 默辨 来源 https urlify cn Abyuyy 写在前面 前些天看完了JVM的内存结构 自以为自己是懂了 心里想想不就是分线程共享和线程私有嘛 然后又怎么怎么分怎么怎么的嘛 直到遇到了这道题目 说句实话 曾经自己做这种运算题
  • 空间金字塔池化、空洞卷积、深度可分离卷积

    空间金字塔池化 其主要目的是对于任意尺寸的输入产生固定大小的输出 思路 对于不同大小的feature map分成不同大小的块 不同大小的等份 根据具体情况进行设定 然后对每一份进行最大池化 一般是进行最大池化 将池化后的feature ma
  • 项目管理十大知识领域(十)--- 项目采购管理(过程、输入、工具和技术、输出)

    项目管理十大知识领域 十 项目采购管理 1 规划采购管理 输入 项目管理计划 需求文件 风险登记册 活动资源需求 项目进度计划 活动成本估算 干系人等级册 事业环境因素 组织过程资产 工具 自制或外购分析 专家判断 市场调研 会议 输出 采
  • leetcode第一题 :两数之和

    两数之和的哈希表解法 一 题目描述 二 算法思路 1 哈希表的相关说明 2 哈希算法 3 题目讲解 三 题解代码 四 运行结果以及最后的一点点解释 一 题目描述 这里直接贴的leetcode中的题目 哈哈哈 给定一个整数数组 和一个整数目标
  • 深入了解MySQL存储引擎-------InnoDB

    如果想看自己的数据库默认使用的那个存储引擎 可以通过使用命令SHOW VARIABLES LIKE storage engine 一 InnoDB存储引擎 1 InnoDB是事务型数据库的首选引擎 支持事务安全表 ACID 事务的ACID属
  • QT笔记- QListWidget删除item时, 信号QListWidget::currentRowChanged()出现行(索引)错误

    删除QListWidget行或项时 currentRowChanged 信号会在删除前发出 Qt信号QListWidget currentRowChanged int row 在QListWidget当前行号改变时发出 但需注意的是 在使用
  • Spring-IOC容器(控制反转)

    目录 Spring框架图 IOC原理 IOC接口 BeanFactory DI依赖注入 Spring框架图 1 核心层 Core Container 核心容器 这个模块是Spring最核心的模块 其他的都需要依赖该模块 2 AOP层 AOP
  • C++,友元的基本概念以及友元的创建

    一 友元 1 1 友元的基本概念 C 控制对类对象私有部分的访问 通常公有类方法提供唯一的访问途径 但是有时候这种限制太严格 以致于不适合特定的编程问题 在这种情况下 C 提供了另一种形式的访问权限 即友元 友元的种类 友元函数 友元类 友
  • 【软考】-高项-立项管理-重要知识点思维导图

    高项 立项管理 项目立项管理 项目立项包括4个阶段 项目建议与立项申请 含义 作用 项目建议书内容 初步可行性研究 详细可行性研究 内容 评估与决策 7个步骤 可行性研究 内容 可研报告中的开发总成本 经营成本 非经营成本 项目立项管理的作
  • Python判断一个数是否为素数

    Python判断一个数是否为素数 定义一个函数 用来判断一个数 是否为素数 函数名 isPrime 参数 数值n 返回值 布尔类型结果 def isPrime n flag True for i in range 2 n if n i 0
  • 服务器部署 Nginx + Django + Vue

    服务器部署 Nginx Django Vue 服务器预设 租服务器 SSH 远程连接 配置公钥 更新系统软件包 配置 Django 安装 python3 8 4 安装虚拟环境 创建虚拟环境 虚拟环境中安装 Django 和 uWSGI 安装
  • 搜索引擎中网络爬虫的设计分析

    搜索引擎中网络爬虫的设计分析 作者 Ackarlix 下面简单介绍一下搜索引擎的机器爬虫的制作和一些基本要注意的事项 说的简单易懂一些 网络爬虫跟你使用的 离线阅读 工具差不多 说离线 其实还是要跟网络联结 否则怎么抓东西下来 那么不同的地