首页 > 解决方案 > BeautifulSoup 并行解析

问题描述

我有一个我想用 BeautifulSoup 解析的文件列表。跑步

soup = BeautifulSoup(file, 'html.parser')

每个文件大约需要 2 秒,以便

soups = []
for f in files:
    soups.append(BeautifulSoup(f, 'html.parser'))

大约需要 40 秒。我想BeautifulSoup(file, 'html.parser')在每个文件上一起运行,以便整个过程在大约 2 秒内完成。这可能吗?

我尝试了以下方法,但没有奏效:

async def parse_coroutine(F):
    return BeautifulSoup(F, 'html.parser')

async def parse(F):
    p = await parse_coroutine(F)
    return p

lst = [parse(f) for f in files]

async def main():
    await asyncio.gather(*lst)

asyncio.run(main())

1)BeautifulSoup(F, 'html.parser')运行完成,我不能在运行时调用其他函数

2)上面的代码没有给我我想要的:我希望返回的对象BeautifulSoup(F, 'html.parser')存储在一个列表中

据此异步并没有真正按照我想要的方式实现并行处理。那么我的选择是什么?如果可能的话,我想要一个具体的解决方案,因为我不熟悉多线程/并发编程等。

标签: asynchronousparallel-processingbeautifulsoup

解决方案


推荐阅读