Python Link Fetcher性能问题

时间:2011-11-16 18:28:25

标签: python beautifulsoup

所以我正在编写链接提取器,以便在给定的“起始链接”组的特定网站上查找新链接。

目前我正在使用Python / Beautiful Soup来取得相当不错的成就。​​

我有一个输入文件[针对每个网站],我从中构建了“起始链接”列表。

我使用urllib2加载网页然后漂亮的汤来找到我需要获取的链接组并将它们附加到列表中。有些网站的链接在很多不同的页面之间分开,所以我必须加载它们以收集链接。

在从每个“起始链接”收集所有指定类型的链接之后,我将它与此列表与我从文件加载的“先前收集的”列表进行比较。然后我将差异返回到另一个列表,即“新链接”列表,并将这些列表添加到“以前收集的”链接列表中。

我的问题是表现。每次重新运行程序时,我都会回想起以前看过的所有这些链接,这意味着我正在重新加载一堆我不会从中获取任何新链接的页面。

一般来说,网站会在其他网站之上添加新链接,因此我认为我的下一步行动可能是将“当前可用”链接与“之前收集的”列表进行比较,如果没有匹配,则收集链接直到匹配发生,然后它将退出这个给定的“起始链接”并继续下一个,这可能为网站分解链接节省大量页面加载。

这有助于加快获取我将安排每隔几天运行一次的新链接吗?

“先前收集的”列表中可能有几十万个链接,所以我不确定这会如何影响反复运行这种比较与保持程序愚蠢并始终回忆所有可用的链接。

你们有更好的解决方案吗?任何意见都非常感谢。

2 个答案:

答案 0 :(得分:1)

如果你想要一个简单的磁盘持久性哈希表,你可以使用Python货架 http://docs.python.org/library/shelve.html

答案 1 :(得分:0)

您应该考虑使用哈希来比较以前收集的列表。不是将链接列表存储为字符串,而是为这些链接存储MD5或SHA1哈希列表。将哈希值与哈希列表进行比较比将字符串与字符串列表进行比较要快得多。

或者,如果您维护并保留了遇到链接的实际哈希表,那么您不必通过列表进行任何搜索和比较,但是会有恒定的时间查找以了解您是否看过链接。如果您的列表很大,那么完整的哈希表会花费大量内存。