2010-05-29 158 views
2

嘿伙计们,每隔一段时间我都需要自动从网站收集数据任务。有时我需要一个目录中的一堆URL,有时候我需要一个XML站点地图(是的,我知道有很多软件和在线服务)。网络爬虫,反馈?

不管怎么说,跟上我之前的问题,我已经写了一个可以访问网站的小webcrawler。

  • 基本爬虫类,以方便,快捷地与一个网站交互。

  • 覆盖“doAction(String URL,String content)”来进一步处理内容(例如存储它,解析它)。

  • Concept允许抓取程序的多线程。所有类实例共享已处理和排队的链接列表。

  • 可以建立一个JDBC连接来存储链接到数据库中,而不是跟踪对象中的处理链接和排队链接。

  • 但是,目前仅限于一个网站,可以通过添加externalLinks堆栈并根据需要添加到其中来扩展它。

  • JCrawler旨在用于快速生成XML站点地图或解析网站以获取所需信息。它轻巧。

这是写的爬虫好/体面的方式,提供上述的限制?任何投入将极大地帮助:)

http://pastebin.com/VtgC4qVE - Main.java
http://pastebin.com/gF4sLHEW - JCrawler.java
http://pastebin.com/VJ1grArt - HTMLUtils.java

回答

2

我在公司写了一个自定义的网络爬虫,我遵循类似步骤正如你所提到的,我发现它们是完美的。我想说的唯一附加就是它应该有一个轮询频率在一段时间后爬行。

所以它应该遵循“Observer”的设计模式,这样如果在给定的URL上发现任何新的更新一段时间后就会更新或写入文件。

+0

谢谢你的回答。什么是投票?蜘蛛本身并没有连续运行,但我想我可以通过一些改变来做到这一点;在这种情况下,我完全同意观察者的设计模式。事实上,我个人可能会在doAction中实现更新的东西。 – 2010-05-29 19:46:56

+0

轮询只不过是爬行的时间段。让我们说5分钟,这意味着每隔5分钟它就会抓取到一个特定的URL。 – 2010-05-29 20:03:15

5

您的抓取程序似乎无法以任何方式尊重robots.txt,并使用假冒的User-Agent字符串来炫耀,就好像它是网络浏览器。这可能会导致未来的法律纠纷。请考虑到这一点。

+2

“未来”是这里的关键词。违反robots.txt文件在法庭上从未被认为是非法的。有一个可贵的小先例,但Wayback Machine在2007年参与了一项可能会引起关注的行动:http://www.theregister.co.uk/2007/07/26/wayback_firm_suit/ – jasonmp85 2010-05-30 00:31:44

+0

然而,大多数网站会标记这样的网络爬虫作为可疑活动,并可能阻止/禁止它访问该网站。我强烈建议尊重robots.txt并使用明智的用户代理字符串,如“JCrawler/1.0 http:// jcrawler.org”,并且*拥有一个网站,您可以在其中公开有关抓取工具的所有详细信息以及哪些用户/网站管理员可能期望从这个爬虫。 – BalusC 2010-05-30 00:36:51

+0

除了@ BalusC的评论,有一个专门的代理意味着你不会伪装成IE6(所有东西),并说服可怜的不知情的管理员,他们需要继续支持它。 – kibibu 2010-05-30 08:09:21

0

我建议您将开源JSpider作为抓取工程的起点,它涵盖了网络抓取工具的所有主要问题,包括robots.txt,并且有一个插件方案,可用于应用您自己的任务到它访问的每个页面。

这是对JSpider的一个简短的略微过时的评论。这篇文章的网页回顾了其他几个Java spidering应用程序。

http://www.mksearch.mkdoc.org/research/spiders/j-spider/