如何使用多参数多重处理for循环

时间:2017-09-23 04:29:23

标签: python python-3.x web-scraping parallel-processing beautifulsoup

我正在处理废品代码以从.aspx网页抓取信息。我想检索数据库中的所有记录,但我没有记录索引的列表。我只知道索引是介于1和9000000之间的整数。因此,我正在考虑使用for循环对索引使用强力。

我想从每条记录中检索某些信息。所以,我使用beautifulsoup和pandas.DataFrame来存储我想要的信息。然后,我追加数据帧来收集记录。

例如:

df_all = pandas.DataFrame(col= ['A', 'B', 'C'])
# id: Unique id of each record; df_all: the dataframe that stores the records
def func(id, df_all):
    """
    Use beautifulsoup to collect the info from the webpage
    """
    df_temp = pd.DataFrame([1,2,3], col= ['A', 'B', 'C'])
    df_all = df_all.append(df_temp, ignore_index= True)
    return df_all

我正在考虑使用几个for循环来同时执行func函数。例如,第一个客户端执行1到22500000;第二个客户端做22500001到450000;等等。然后我可以合并每个客户的结果。我尝试使用ipyparallel,multiprocessing.pool和joblib。但是,似乎我的函数结构对于并行处理是不正确的。我应该如何修改我的结构以执行并行for循环任务?或者有更好的方法从数据库中获取数据?数据库中只有大约29k +条记录。从1到90000000使用蛮力是不是最好的方法。

1 个答案:

答案 0 :(得分:0)

好的肮脏的解决方案,但我认为它有效。

有一个字典映射{owner nameprocess_id}

对于字母表中的每个字母,请使用您的程序:

  • 在搜索页面上运行“所有者名称”搜索
  • 保存字典中的所有process_ids
  • 转到结果的下一页,重复直到所有页面都已保存

要运行搜索并转到下一页,请发送http POST。打开开发人员工具,单击按钮,查看您的浏览器发送的内容,然后从Python发送相同的内容。

然后,一旦拥有了所有process_ids,您就可以遍历字典并轻松访问每个记录页面。