2017-06-11 78 views
1

我目前正在得到A,A,B,B的輸出而不是A,B,A,B。在循環中合併Python數組?

我真的想將每個表頭的值與每個表數據元素(如字典)相關聯。

import requests 
from bs4 import BeautifulSoup 

courseCode = "IFB104" 
page = requests.get("https://www.qut.edu.au/study/unit?unitCode=" +  courseCode) 

soup = BeautifulSoup(page.content, 'html.parser') 
table = soup.find_all(class_='table assessment-item') 

numOfTables = 0 
tableDataArray = [] 

for tbl in table: 
    numOfTables = numOfTables + 1 
    tableDataArray += [tbl.find_all('th'),tbl.find_all('td')] 
+0

您能否提供一個表格的例子,以及您期望的輸出是什麼? –

+0

目前,它打印'3 [名稱,說明,加權,截止日期,內部或外部,集團或個人,涉及到學習成果],[​​#3 :測驗/測驗,​​每週測驗。每週在講座中您將介紹用於解決技術問題的計算原理。您對這些技術的理解將通過每週在線測驗和測試進行測試,​​25 & percnt;,​​整個學期,​​內部,​​個人,​​1,2]' – yeeeeee

+0

它打印出所有標籤從該表(在整個HTML頁表三選一),然後將所有的​​標籤)。我想製作一本詞典(我最初說的是數組,但字典更好),將每個與每個​​聯繫起來。這樣,我可以打電話給評估的名稱,並返回「#3:測驗/測試」,或稱重,並獲得「25%」。 – yeeeeee

回答

1

如果我理解正確的話,你需要使用字典,而不是名單:

import requests 
from bs4 import BeautifulSoup 

courseCode = "IFB104" 
page = requests.get("https://www.qut.edu.au/study/unit?unitCode=" + courseCode) 

soup = BeautifulSoup(page.content, 'html.parser') 
table = soup.find_all(class_='table assessment-item') 

numOfTables = 0 
tableFormatted1 = [] 
tableFormatted2 = {} 

for tbl in table: 
    numOfTables = numOfTables + 1 
    keys = tbl.find_all('th') 
    values = tbl.find_all('td') 
    new_data = dict(zip(keys, values)) 

    # Method 1 
    tableFormatted1.append(new_data) 

    # Method 2 
    for k, v in new_data.items(): 
     if k in tableFormatted2: 
      tableFormatted2[k].append(v) 
     else: 
      tableFormatted2[k] = [v] 

print('List of dictionaries') 
print(tableFormatted1) 
print('') 

print('Dictionary with list') 
print(tableFormatted2) 

編輯:

tbl每次迭代的覆蓋已經完成迭代。所以,有必要改變結構。我剛剛提供了兩種方法。

+0

幾乎完美!除了我意識到我需要爲所有三張桌子做,而不僅僅是一張桌子。我原來的帖子在我輸入'tableDataArray = ...'而不是'+ ='時出錯。它應該遍歷3個表格......分解在,​​級別。 – yeeeeee

+0

好的。只需編輯。 – Rafael

+0

但有一個問題。密鑰是相同的('name'可以是'Portfolio','Exam(寫)'或'Quiz/Test')。你需要一個包含所有值的列表的密鑰嗎? – Rafael