python - 如何在使用多处理进行网络抓取时对结果进行排序?
问题描述
我正在编写一个程序,用于使用多处理从多个 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)
解决方案
解决方案
print
将S in更改为f
Sreturn
以便按顺序获得结果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)
推荐阅读
- python - 如何将 Bokeh 图形的渲染 HTML 直接导出为字符串?
- apex - 在闪电组件中加载第 3 方 Jquery 库时面临的问题
- javascript - 谷歌地图标记聚类为 React
- azure-devops - 将存储库从 Github 导入 Azure Repos
- docker - 本地和远程之间的 Docker 映像大小差异
- angular - 将组件 A 的方法结果传递给组件 B 的模板
- android - Android Studio 3.5 上的 onNavigationItemSelected
- r - 形状文件中的重复名称,不允许读取文件
- java - 错误:参数索引超出范围(39 > 参数数量,即 38)
- python - 分类分类概率图