【问题标题】:Python Link Fetcher Performance IssuePython 链接提取器性能问题
【发布时间】:2011-11-16 18:28:24
【问题描述】:

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

目前我正在使用 Python/Beautiful Soup 来实现这一目标并取得了不错的成功。

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

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

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

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

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

这是否有助于加快我将安排每隔几天运行的新链接的获取速度?

“以前收集的”列表中可能有几十万个链接,所以我不确定这将如何影响反复运行此比较与保持程序哑并始终重新收集所有可用链接的情况。

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

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我正在调查。
    【解决方案2】:

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

    或者,如果您维护和持久化所遇到链接的实际哈希表,那么您无需通过列表进行任何搜索和比较,而是需要持续时间查找以了解您是否看到了链接。但是,如果您的列表很大,则完整的哈希表将占用大量内存。

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2018-12-25
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多