微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在哪里存放网页抓取工具资料?

我有一个简单的网页抓取工具,从根(给定url)启动,下载根页面的html,然后扫描超链接并抓取它们.我目前将html页面存储在sql数据库中.我目前面临两个问题:

>看起来爬网到达瓶颈,并且无法更快地爬行,我已经阅读了一些地方,为网页制作多线程http请求可以使爬网程序更快地爬行,但我不知道如何做到这一点.
>第二个问题,我需要一个高效的数据结构来存储html页面,并能够对它们运行数据挖掘操​​作(目前使用sql数据库想听听其他建议)

我正在使用.Net框架,C#和MS sql

解决方法

因此,首先,我不用担心进入分布式抓取和存储,因为顾名思义:它需要相当数量的机器才能获得良好的效果.除非你有一个电脑农场,否则你将无法真正受益.您可以构建一个 gets 300 pages per second and run it on a single computer with 150 Mbps connection的爬网程序.

列表中的下一件事是确定你的瓶颈在哪里.

对您的系统进行基准测试

尝试消除MS sql

>加载您要爬网的1000个URL的列表.
测试您可以抓住它们的速度.

如果1000个网址没有给你足够大的抓取,那么可以获得10000个URL或100k的URL(或者如果你觉得勇敢,那么可以获得Alexa top 1 million).无论如何,尝试建立一个尽可能多的变量被排除的基线.

识别瓶颈

在抓取抓取速度的基线之后,尝试确定导致您的减速的原因.此外,您将需要开始使用多任务,因为您已经被绑定,并且您在获取可以用于提取链接并执行其他操作数据的其他操作的页面之间有很多空余时间.

你现在每秒要多少页?你应该尝试每秒获得超过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和各种其他高度可扩展的解决方案相集成.

原文地址:https://www.jb51.cc/csharp/93381.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐