使用BeautifulSoup与多处理池映射时的递归深度错误

kic*_*ich 10 python beautifulsoup multiprocessing

我一直在使用BeautifulSoup来解析html文件,而我编写的所有脚本都运行良好但速度很慢.所以我正在尝试使用多处理工作池和BeautifulSoup,这样我的程序可以更快地运行(我有100,000 - 1,000,000个html文件要打开).我写的脚本比较复杂,但我在这里写下了一个小例子.我试图做这样的事情,我一直在收到错误

'runtimeError:蚀刻对象时超出了最大递归深度'

编辑代码

from bs4 import BeautifulSoup
from multiprocessing import Pool
def extraction(path):
   soup=BeautifulSoup(open(path),"lxml")
   return soup.title

pool=Pool(processes=4)
path=['/Volume3/2316/http/www.metro.co.uk/news/852300-haiti-quake-victim-footballers-stage-special-tournament/crawlerdefault.html','/Volume3/2316/http/presszoom.com/story_164020.html']
print pool.map(extraction,path)
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)

在做了一些搜索和挖掘一些帖子之后,我知道错误正在发生,因为BeautifulSoup超出了python解释器堆栈的深度.我试图提高限制并运行相同的程序(我上升到3000)但错误仍然相同.我停止提高限制因为打开ht​​ml文件时问题出在BeautifulSoup上.

使用BeautifulSoup进行多处理将加快我的执行时间,但我无法弄清楚如何应用它来打开文件.

有没有人有任何其他方法如何使用BeautifulSoup与多处理或如何克服这些错误?

任何形式的帮助将不胜感激,我坐了几个小时试图解决它并理解为什么我得到错误.

编辑

我用路径中给出的文件测试了上面的代码,我得到了与上面相同的RuntimeError

这些文件可以在这里访问(http://ec2-23-20-166-224.compute-1.amazonaws.com/sites/html_files/)

Seb*_*erk 3

我认为原因是整个soup.title对象的返回。看来,所有的childrenparent元素以及它们的子元素和父元素等都在此时被分析,这引发了递归错误。

\n\n

如果对象的内容是您需要的,您可以简单地调用str方法:

\n\n
return soup.title.__str__()\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是,这意味着您无法再访问 bs4 库提供的所有其他信息。

\n