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)。
我正在使用维基百科 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)。