【发布时间】:2021-11-04 03:22:49
【问题描述】:
我正在编写一个程序,用于使用多处理从多个 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)
【问题讨论】:
-
要么对结果进行排序,要么实现同步机制。排序应该容易得多。
-
你能解释一下怎么做吗?我知道的一件事是我们需要枚举该 URL 列表,但我对传递 'f' 的内容感到困惑
-
欢迎来到 SO。请拨打tour,阅读How do I ask a good question? 和How to create a Minimal, Reproducible Example。提供的代码不会运行,它会引发
ModuleNotFoundError: No module named 'constants',一旦修复,它将引发NameError: name 'bonds_values' is not defined。为了帮助你,我需要能够重现你的结果。即使只是输入/输出的一个子集也足够了。 -
等一下,看来
mappreserves order。这意味着bond_values将按bonds_url排序,但您的print语句可能会出现故障。
标签: python python-multiprocessing