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