IT虾米网

c#之网络爬虫数据存储在哪里

pengyingh 2023年11月01日 编程语言 200 0

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

  1. 爬虫好像遇到了瓶颈,没法爬得更快,我在某处读到,对页面进行多线程http请求可以让爬虫爬得更快,但我不确定如何做到这一点。

  2. 第二个问题,我需要一个高效的数据结构来存储 html 页面并能够对其进行数据挖掘操​​作(目前正在使用 SQL 数据库,希望听到其他建议)

    <

我正在使用 .Net 框架、C# 和 MS SQL

请您参考如下方法:

所以首先,我不会担心进入分布式爬虫和存储,因为顾名思义:它需要相当数量的机器才能获得好的结果。除非你有一个计算机农场,否则你将无法真正从中受益。您可以构建一个 gets 300 pages per second and run it on a single computer with 150 Mbps connection 的爬虫.

list 上的下一件事是确定您的瓶颈在哪里。

对您的系统进行基准测试

尝试消除 MS SQL:

  • 加载您要抓取的 1000 个网址的列表。
  • 对您抓取它们的速度进行基准测试。

如果 1000 个 URL 不足以让您进行足够大的抓取,则获取 10000 个 URL 或 100k 个 URL(或者如果您有勇气,则获取 Alexa top 1 million )。在任何情况下,尝试建立一个排除尽可能多的变量的基线。

识别瓶颈

获得爬网速度的基线后,请尝试确定导致速度变慢的原因。此外,您将需要开始使用多线程,因为您受 i/o 限制,并且在获取页面之间有大量空闲时间,您可以将这些时间用于提取链接和做其他事情,例如工作与数据库。

您现在每秒获得多少页?您应该尝试每秒获取超过 10 页。

提高速度

显然,下一步是尽可能多地调整您的爬虫:

  • 尝试加快您的抓取工具的速度,使其达到硬性限制,例如您的带宽。
  • 我建议使用异步套接字,因为它们比阻塞套接字、WebRequest/HttpWebRequest 等快得多。
  • 使用更快的 HTML 解析库:从 HtmlAgilityPack 开始如果你觉得勇敢,那就试试 Majestic12 HTML Parser .
  • 使用embedded database ,而不是 SQL 数据库,并利用键/值存储(散列键的 URL 并将 HTML 和其他相关数据存储为值)。

开始吧!

如果您已经掌握了以上所有内容,那么我建议您尝试成为专业人士!重要的是你有一个好的选择算法来模仿 PageRank 以平衡新鲜度和覆盖率:OPIC is pretty much the latest and greatest in that respect (AKA Adaptive Online Page Importance Computation) .如果您拥有上述工具,那么您应该能够实现 OPIC 并运行相当快的爬虫。

如果您对编程语言很灵活并且不想偏离 C# 太远,那么您可以尝试基于 Java 的企业级爬虫,例如 Nutch . Nutch 与 Hadoop 和各种其他高度可扩展的解决方案集成。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!