爬取互联网

12

我想要爬取一些特定的内容,例如音乐会、电影、艺术画廊开幕等等。任何值得花时间前往的活动。

我应该如何实现一个爬虫呢?

我听说过 Grub(grub.org -> Wikia)和 Heritix(http://crawler.archive.org/)。

还有其他的选择吗?

大家有什么意见呢?

-Jason

10个回答

10

8

5

4

请查看Scrapy。它是一个使用Python编写的开源网络爬虫框架(听说类似于Django,不同的是它不是用来提供网页服务,而是下载它们)。它容易扩展、分布式/并行,并且非常有前途。

我会使用Scrapy,因为这样我可以节省我的力量,用于更琐碎的事情,如从抓取的内容中提取正确的数据并插入数据库。


3

我认为网络爬虫部分将是任务中最简单的部分。难点在于决定访问哪些网站以及如何发现你想要访问的网站上的事件。也许你想考虑使用GoogleYahoo API来获取所需数据。他们已经完成了对互联网上许多页面的爬取工作,因此您可以专注于筛选数据以获取所需的事件,这是我认为更加困难的问题。


2
实际上编写一个可扩展的爬虫是一项相当具有挑战性的任务。我在工作中实现了一个并长时间维护它。直到你开始编写并遇到问题,你才会意识到存在很多问题,特别是处理CDN和友好爬取站点。自适应算法非常重要,否则您将触发DOS过滤器,即使您不知道它也会发生,如果您的爬取足够大。
需要考虑的事情:
- 可接受的吞吐量是多少? - 如何处理站点宕机? - 如果被阻止了怎么办? - 是否要进行隐秘爬行(有争议且实际上很难做到正确)?
我实际上已经写了一些关于爬虫构建的东西,如果我有空的话,我可能会将其放在线上,因为构建一个合适的爬虫比人们告诉你的要困难得多。大多数开源爬虫对于大多数人来说都足够好用,因此如果可以的话,我建议您使用其中之一。选择哪个取决于功能/平台。

1

如果你发现爬取互联网变得太繁琐,你可能想考虑构建一个RSS聚合器并订阅像craigslist和upcoming.org这样的流行事件网站的RSS源。

每个网站都提供本地化、可搜索的活动。RSS为你提供了(少量)标准化格式,而不是必须处理组成网络的所有畸形HTML...

有一些开源库,比如ROME(Java),可以帮助消费RSS源。



0

0

Kevin提到的RSS订阅建议之后,您可能想要查看Yahoo Pipes。我还没有尝试过它们,但我认为它们允许您处理多个RSS订阅并生成网页或更多的RSS订阅。


1
永远不要在大型项目中使用管道。它不太可靠且速度较慢。 - mixdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接