【问题标题】:Python - using multi-processing / multi threading for web scrapingPython - 使用多处理/多线程进行网页抓取
【发布时间】:2017-11-15 12:04:28
【问题描述】:

我正在使用维基百科 python 包来抓取特定主题的数据

q=['NASA', 'NASA_insignia', 'NASA_spinoff_technologies', 'NASA_facilities', 'NASA_Pathfinder', 'List_of_NASA_missions', 'Langley_Research_Center', 'NASA-TLX', 'Budget_of_NASA', 'NASA_(disambiguation)']

上面的例子,我搜索过 NASA。现在我需要获取列表中每个元素的摘要。

ny = []
for i in range(len(q)):
    y = wikipedia.page(q[i])
    x = y.summary
    ny.append(x)

在整个过程中,即遍历列表的每个元素并检索每个元素的摘要,完成整个过程大约需要 40-60 秒(即使网络连接良好)

我对多处理/多线程了解不多。我怎样才能在相当长的时间内加快执行速度?任何帮助将不胜感激。

【问题讨论】:

    标签: multithreading python-3.x web-scraping multiprocessing runtime-compilation


    【解决方案1】:

    您可以使用处理池(请参阅documentation)。

    这是一个基于您的代码的示例:

    from multiprocessing import Pool
    
    
    q = ['NASA', 'NASA_insignia', 'NASA_spinoff_technologies', 'NASA_facilities', 'NASA_Pathfinder',
         'List_of_NASA_missions', 'Langley_Research_Center', 'NASA-TLX', 'Budget_of_NASA', 'NASA_(disambiguation)']
    
    def f(q_i):
        y = wikipedia.page(q_i)
        return y.summary
    
    with Pool(5) as p:
        ny = p.map(f, q)
    

    基本上f 在单独的进程中应用于q 中的每个元素。 您可以在定义池时确定进程数(在我的示例中为 5)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 2012-03-28
      相关资源
      最近更新 更多