首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络爬虫数据存储在哪里?

网络爬虫数据存储在哪里?
EN

Stack Overflow用户
提问于 2012-01-17 01:00:13
回答 2查看 4.9K关注 0票数 14

我有一个简单的web爬虫,从根开始(给定url),下载根页面的html,然后扫描超链接并抓取它们。我目前将html页面存储在SQL数据库中。我目前面临两个问题:

  1. 似乎爬行达到了瓶颈,无法更快地爬行,我在某个地方读到过这样的消息:对页面进行多线程http请求可以使爬行器更快,但我不知道如何做到这一点。
  2. 第二个问题是,我需要一个高效的数据结构来存储html页面,并能够在它们上运行数据挖掘操作(目前使用的是SQL数据库,希望听到其他建议)。

我使用的是.Net框架、C#和MS。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-17 01:30:50

所以首先也是最重要的一点,我不担心进入分布式爬行和存储,因为顾名思义:它需要大量的机器才能获得好的结果。除非你有一个电脑农场,否则你就无法真正从它中获益。你可以建立一个爬虫的获取每秒300页,并在连接150 Mbps的单台计算机上运行。

清单上的下一件事是确定瓶颈在哪里。

测试您的系统

尝试消除MS:

  • 加载一个列表,比如说,你想要爬的1000个URL。
  • 衡量你能爬得多快。

如果1000个URL没有给您足够大的爬行,那么获得10000或100 k URL(或者如果您感觉勇敢,那么就得到阿列克莎)。在任何情况下,尝试建立一个基线,尽可能多的变量排除在外。

识别瓶颈

在你有了爬行速度的基线之后,试着确定是什么导致了你的减速。此外,还需要开始使用多线程,因为i/o是绑定的,在获取页面之间有大量的空闲时间,您可以将这些空闲时间用于提取链接和处理数据库等其他事情。

你现在每秒有多少页?你应该试着每秒得到超过10页的信息。

提高速度

显然,下一步是尽可能地调整爬行器:

  • 试着加速你的爬行器,使它达到硬限制,如你的带宽。
  • 我建议使用异步套接字,因为它们比阻塞套接字、WebRequest/HttpWebRequest等快得多。
  • 使用一个更快的HTML解析库:从HtmlAgilityPack开始,如果您觉得勇敢,那么试试Majestic12 HTML分析器
  • 使用嵌入式数据库,而不是SQL数据库,并利用键/值存储(散列键的URL,并将HTML和其他相关数据作为值存储)。

加油,亲!

如果你已经掌握了以上所有内容,那么我建议你试着去做职业选手!重要的是,为了平衡新鲜度和覆盖率,您必须有一个模仿PageRank的良好选择算法:OPIC在这方面几乎是最新和最伟大的(AKA自适应在线页面重要性计算)。如果您有上述工具,那么您应该能够实现OPIC和运行一个相当快的爬虫。

如果您在编程语言上很灵活,并且不想偏离C#太远,那么您可以尝试基于Java的企业级爬虫,比如纳奇。Nutch与Hadoop和其他各种高度可伸缩的解决方案集成在一起。

票数 13
EN

Stack Overflow用户

发布于 2012-01-17 01:03:24

这就是谷歌的BigTable设计的目的。HBase是一个流行的开源克隆,但是您需要处理的是Java和(可能) Linux。卡桑德拉也是用Java编写的,但运行在Windows上。两者都允许.NET客户端。

由于它们被设计成分布在许多机器上(存在数千个节点中的实现),它们可以承受极其沉重的读写负载,甚至比最快的SQL Server或Oracle硬件还多。

如果您对Java基础设施感到不舒服,您可能想看看微软的蓝表存储,看看类似的特性。不过,这是一个托管/云解决方案--您不能在自己的硬件上运行它。

至于处理数据,如果您选择HBase或Cassandra,您可以使用Hadoop MapReduce。MR被Google推广到了你所描述的任务中--处理大量的网络数据。简而言之,MapReduce的想法是,与其在一个地方运行您的算法,然后将所有的数据通过管道传输,不如将您的程序发送出去,在存储数据的机器上运行。它允许您在基本不受限制的数据上运行算法,前提是您拥有用于该数据的硬件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8888454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档