0

我正在研究一个报废代码以从.aspx网页抓取信息。我想检索数据库中的所有记录,但我没有记录索引的列表。我只知道该索引是一个介于1到9000000之间的整数。因此,我正在考虑使用蛮力对索引使用for循环。如何使用多个参数多处理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功能。例如,第一个客户端的IP地址为1到22500000;第二个客户端22500001至4500000;等等。然后我可以结合每个客户的结果。我试图使用ipyparallel,multiprocessing.pool和joblib。但是,似乎我的函数的结构对于并行处理是不正确的。我应该如何修改我的结构以执行并行循环任务?还是有更好的方法从数据库中获取数据?数据库中只有大约29k +条记录。要使用1到90000000的索引蛮力真的不是解决这个问题的最好方法。

+0

请详细说明。你拥有该网站,还是别人的?如果是别人的,你怎么连接到他们的数据库?为什么你需要一个索引?你在哪里调用BeautifulSoup,它返回什么对象?记录是什么样子的?目标是在Pandas数据框中存储记录吗? – ddg

+0

调用记录信息的最简单方法是使用相应的ID。我在功能里称了美丽的汤,因为每个记录都有自己的网页。链接是像https://propaccess.trueautomation.com/clientdb/Property.aspx?prop_id=12345。但我必须从链接中获取cookie:https://propaccess.trueautomation.com/clientdb/?cid=39首先。然后,我通过替换id号 – whh1294

回答

0

好的一种肮脏的解决方案,但我认为它的工作原理。

有一个字典映射{owner nameprocess_id}

字母表中的每个字母,让你的程序:

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

要运行搜索并转到下一页,请发送http POST。打开开发者工具,点击按钮,看看你的浏览器发出了什么,然后从Python发送相同的东西。

然后,一旦你有了所有的process_ids,你可以遍历字典并很容易地访问每个记录页面。

+0

连接到每个页面,我尝试使用request.post。但是,似乎该网页不使用表单数据来请求服务器。我查了一下html代码,发现它是由一些cookies驱动的。您能否介绍一下如何在此上使用request.post? – whh1294