首页 > 解决方案 > 如何在使用多处理进行网络抓取时对结果进行排序?

问题描述

我正在编写一个程序,用于使用多处理从多个 url 中抓取数据。在这里,我将所有 URL 存储在 bond_url 列表中。它正在工作,我正在获得输出,但这里的问题是输出是随机顺序的。我希望抓取的数据与 bond_url 中的 URL 顺序相同。有什么解决办法吗?

from requests_html import HTMLSession
import constants

bonds_url  =[]   
from multiprocessing import Pool
    
def f(url):        
    session = HTMLSession()
    response = session.get(url) 
    
    try:    
        data = [i.text.strip() for i in response.html.find(".value") ]
        bonds_values.append(float(data[0])) 
        print(data[0])             
    except:    
        data =  [i.text.strip() for i in response.html.find("div>span[data-reactid='31']")]
        bonds_values.append(float(data[0]))
        print(data[0])
    
if __name__ == '__main__':
    with Pool(len(bonds_url)) as p:
        p.map(f, bonds_url)

标签: pythonpython-multiprocessing

解决方案


解决方案

print将S in更改为fSreturn以便按顺序获得结果multiprocessing.Pool.map

from multiprocessing import Pool

from requests_html import HTMLSession

import constants

bonds_url = []


def f(url):    
    session = HTMLSession()
    response = session.get(url) 
    try:
        data = [i.text.strip() for i in response.html.find(".value")]
    except:
        data =  [i.text.strip() for i in response.html.find("div>span[data-reactid='31']")]
    return float(data[0])


if __name__ == '__main__':
    with Pool(len(bonds_url)) as p:
        bond_values = p.map(f, bonds_url)


推荐阅读