Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python链接获取程序性能问题_Python_Beautifulsoup - Fatal编程技术网

Python链接获取程序性能问题

Python链接获取程序性能问题,python,beautifulsoup,Python,Beautifulsoup,因此,我正在编写链接获取程序,以便在特定站点上为给定的“起始链接”组查找新链接 目前,我正在使用Python/Beauty Soup来完成这项工作,并取得了相当大的成功 我有一个[每个站点]的输入文件,我从中构建“起始链接”列表 我使用urllib2加载网页,然后使用beautiful soup查找需要获取的链接组,并将它们附加到列表中。有些网站的链接在很多不同的页面之间被分割,所以我必须将它们全部加载以收集链接 在它从每个“起始链接”收集所有指定类型的链接之后,我让它将此列表与我从文件加载的“

因此,我正在编写链接获取程序,以便在特定站点上为给定的“起始链接”组查找新链接

目前,我正在使用Python/Beauty Soup来完成这项工作,并取得了相当大的成功

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

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

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

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

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

这是否有助于加快我计划每隔几天运行一次的新链接的获取

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


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

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


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

如果需要简单的磁盘上Persistant哈希表,可以使用Python工具架

谢谢,我正在调查此事。