Python - 使用多处理/多线程进行网页抓取

Python - using multi-processing / multi threading for web scraping

我正在使用维基百科 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 秒(即使网络连接良好)

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

您可以使用处理池(参见 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)。