2017-09-16 77 views
1

我已經創建了下面的代碼在不同行的多個頁面表:存儲和保存數據從

import requests 
import pandas as pd 
from bs4 import BeautifulSoup 

records = [] 

for factoryId in range(3995, 4000): 
    url = "http://www.modon.gov.sa/ar/IndustrialCities/Pages/factory.aspx? 
    factoryId=" + str(factoryId) 
    r = requests.get(url) 
    content = r.text 
    soup = BeautifulSoup(content, "html.parser") 
    results = soup.find('table', attrs={'class': 'ModonInfoTable'}) 

    for tr in results.find_all('tr'): 
     tds = tr.find_all('td')[1].text 
     records.append(tds) 

print(records) 

爲factoryId 3995所需的輸出,3996:

value1, value2, value3, value4, value5, value6 
value1, value2, value3, value4, value5, value6 

我的問題是試圖循環通過表,從第2列(左側列)收集逗號分隔值,然後添加換行符,然後在下一頁中刮取下一條記錄。

目前,我將所有值附加到列表中,但無法用換行符分隔。

我嘗試過使用numpy,並使用'\n'.join(records) - 兩者都無法獲得理想的效果。

最後我會將所有使用熊貓的值導出到CSV - 這可以很容易地完成。

現在唯一的問題是循環記錄,並正確存儲數據。

+0

@coder - 感謝您的評論 - factoryId + = 1已刪除。 也將期望輸出的樣本添加到問題中。 謝謝 – BeginnerScraper

+0

答案很簡單,即使是發佈它,只需在for循環外添加'records.append('\ n')',然後在拼寫完'print''.join(records)'後即可。這應該工作,我想... – coder

回答

0

我認爲records應該是一個嵌套的列表,每個子列表包含表格單元格,所以當您編寫csv文件時,每個html表格的結果將在新行上。

records = [] 
for factoryId in range(3995, 4000): 
    url = "http://www.modon.gov.sa/ar/IndustrialCities/Pages/factory.aspx?factoryId=" + str(factoryId) 
    soup = BeautifulSoup(requests.get(url).text, "html.parser") 
    results = soup.find('table', attrs={'class': 'ModonInfoTable'}) 
    records.append([tr.find_all('td')[1].text for tr in results.find_all('tr')]) 

print(records) 
+1

謝謝!它按照需要工作。我的問題是在自己的行中添加每個工廠信息。 – BeginnerScraper