1

我正在抓取一个网站以获取信息,并希望从每个页面都可用的翻译页面中获取一些信息。

所以我写了一个函数去相应的页面并获取翻译的信息。唯一的问题是我必须等待它首先是法语,然后是意大利语,然后是德语,然后是西班牙语,然后是英语......我想一次得到它们。

我在英文版上抓取网站,然后当我到达目标页面时,我想同时处理。我已经阅读了很多关于如何对刮板的整个脚本进行多处理的文章,但我只是希望它在刮的这一点上这样做,因为它是瓶颈所在。这是该部分的代码目前的样子:

lang = soup.find('div',{'id':'language-config'})
try: 
    french = translator(lang,language='Français')
    italian = translator(lang,language='Italiano')
    german = translator(lang,language='Deutsch')
    spanish = translator(lang,language='Español')
    english = translator(lang,language='English')

如果可能,我想同时触发该函数的五个实例?可能很简单,只是还没有灯泡的时刻。

4

2 回答 2

0

这很简单,只需使用concurrent.futures即可。由于您的任务是 IO 绑定的,因此ThreadPoolExecutor就足够了。

languages = ('Français', 'Italiano', 'Deutsch', 'Español', 'English')

with ThreadPoolExecutor(max_workers=5) as executor:
    for language in languages:
        executor.submit(translator, lang, language=language)
于 2015-10-10T12:20:49.037 回答
0

试试新asyncio 图书馆。制作一个wrapper_translator包装器,translator在放置@asyncio.coroutine装饰器时返回方法的输出。

于 2015-09-15T22:57:06.140 回答