开发者社区> 吞吞吐吐的> 正文

网络爬虫(2):存储

简介:
+关注继续查看

目前我想到的存储方案有两种:单文件单页面存储和单文件多页面存储。

单文件单页面存储就是一个页面存储在一个文件中,文件名称可以使用页面编号doc_id。这种方案查找的时候容易定位,直接使用文件名就可以,缺点是会产生大量琐碎的文件,管理、冗余和查询感觉都不太方便。

单文件多页面存储即一个文件存储多个页面,写满一个文件后,自动开始写下一个。每个文件有一个编号store_file_id,在查找某一个页面的时候,通过页面的编号doc_id,可以找到对应的store_file_id及页面在文件中的位置position,然后就能找个这个页面。每个文件的大小是可以定制的,默认200M一个。一个页面的数据不会分在两个文件中,只会在一个页面写入完成后,才会发生写新文件的操作,所以存储实际的大小会是200M多几十K。

目前采用的就是单文件多页面的存储方式。其中的每个页面又按以下格式存放数据:

  1. doc_id:页面文档编号,unsigned int,该页面的url的md5签名。
  2. timestamp:页面的抓取时间,time_t类型。
  3. is_analyzed:该页面是否已经分析,bool(short)类型。
  4. url_length:该页面url的长度,unsigned int。
  5. url:该页面的url,长度为url_length的char数组。
  6. domain_length:域名的长度,unsigned int,类似url_length。
  7. domain:域名,长度为domain_length的char数组,类似url。
  8. response_length:响应的长度,unsigned int,类似url_length。
  9. response:响应的内容,长度为response_length的char数组,类似url。

存储格式图示如下(单一存储文件):

页面存储

store模块中的主要函数如下:

/*
 * 初始化文件存储,在调用store_page方法前,必须先调用此方法。
 *     @store_path               存储路径
 *     @store_file_max_length    存储文件的最大长度,单位是字节
 */
extern int initial_store(char* store_path, unsigned long store_file_max_length);
/*
 * 关闭文件存储
 */
extern int close_store();
/*
 * 将页面存储到磁盘
 *     @page    要储存的页面
 */
extern int store_page(page* page);
/*
 * 取得下一个未分析的页面
 *     @page   用于存在数据的页面
 *     @return 成功返回0,出错返回-1,没有未分析的页面,返回1
 */
extern int get_page_to_parse(page* page);

initial_store和close_store这对方法用于开始和结束。initial_store会根据给出的store_path自动计算出下一个要写入的文件的编号和位置。close_store负责关闭文件指针,这两个函数在主程序中出现,且只出现一次:initial_store在出程序的开始,close_store在主程序的结束。

store_page和get_page_to_parse这对方法用于写入和读出。store_page将给出的page结构体写入文件,同时负责新存储文件的创建等。get_page_to_parse则负责读取下一个要分析的页面,存储在page指针中。get_page_to_parse还会将这次读取给出的文件在磁盘中标记为已分析。

这里的分析的含义仅指提取页面中的url。

本文转自冬冬博客园博客,原文链接:http://www.cnblogs.com/yuandong/archive/2008/06/24/Web_Spider_Store.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python爬虫:滤网架构处理爬虫数据
Python爬虫:滤网架构处理爬虫数据
63 0
使用爬虫代理实现安全高效的数据爬取
使用爬虫代理IP,隐藏自己真实的网络地址,同时极大地增加数据爬取的效率
127 0
什么是网络爬虫?
网络爬虫是一种在 Internet 上运行自动化任务的软件应用程序。与人类互联网活动相比,网络爬虫运行的任务通常很简单,并且执行速度要快得多。
82 0
Python爬虫系列5-动态抓取网站核心数据-流处理
每个人都需要互相帮助,而我要做的就是把它呈现出来让大家看到。 比如:你背不下来的书,总有人能背下来,你做不出来的题,总有人能做出来,你愿意拖到明天的事,总有人今天努力做完,那么抱歉,你想要的工作也只能别人干了,你想过的人生也只能别人过了! 师者传道授业解惑。传播的力量就是要把这些东西渗透下去,然后才能长出新的叶子。 共勉!
108 0
爬虫与搜索引擎的区别/pyhton爬虫结构
爬虫与搜索引擎的区别/pyhton爬虫结构
222 0
scrapy框架通用爬虫、深度爬虫、分布式爬虫、分布式深度爬虫,源码解析及应用
scrapy框架是爬虫界最为强大的框架,没有之一,它的强大在于它的高可扩展性和低耦合,使使用者能够轻松的实现更改和补充。 其中内置三种爬虫主程序模板,scrapy.Spider、RedisSpider、CrawlSpider、RedisCrawlSpider(深度分布式爬虫)分别为别为一般爬虫、分布式爬虫、深度爬虫提供内部逻辑;下面将从源码和应用来学习, scrapy.
2443 0
关于网络爬虫的资料整合
关于通用爬虫的介绍 前言:我们生活在一个充满数据的时代。每天,来自商业、社会以及我们的日常生活所产生「图像、音频、视频、文本、定位信息」等各种各样的海量数据,注入到我们的万维网(WWW)、计算机和各种数据存储设备,其中万维网则是最大的信息载体。
2038 0
后端技术杂谈1:搜索引擎基础倒排索引
什么是倒排索引?     见其名知其意,有倒排索引,对应肯定,有正向索引。      正向索引(forward index),反向索引(inverted index)更熟悉的名字是倒排索引。
1772 0
网络爬虫的实现
作者:Gupta, P. ; Johari, K. ; Linagay's Univ., India 文章发表在:  Emerging Trends in Engineering and Technology (ICETET), 2009 2nd International Conference on            pages 838~844 摘要-万维网是一个通过HTML格式使数十亿的文件产生联系的集合 ,然后如此规模庞大的数据已经成为信息检索的障碍,用户为了查找自己想要的资料可能要翻转数页。
710 0
网络爬虫基本原理(一)
网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。这篇博客主要对爬虫以及抓取系统进行一个简单的概述。 一、网络爬虫的基本结构及工作流程     一个通用的网络爬虫的框架如图所示:     网络爬虫的基本工作流程如下:     1.首先选取一部分精心挑选的种子URL;     2.将这些URL放入待抓取URL队列;     3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。
929 0
+关注
吞吞吐吐的
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
如何使用Tair增强数据结构构建丰富在线实时场景
立即下载
打造高性能高可用的搜索服务——爱奇艺搜索架构实践
立即下载
探究高性能的海量节点树
立即下载