2014-12-05 49 views
0

我試圖用Python創建一個簡單的網頁刮板使用BS4,我已經明確地犯了一個菜鳥的錯誤。迭代通過美麗的湯返回的對象

working with a URL是有二十<div>標籤,每個包含4個<li>標籤,我想將它放在字典,所以,最後三個值中鍵入的第一個值的列表。爲了簡化代碼,我把它砍下去只抓第一個<li>

我的問題是循環代碼似乎並沒有遍歷所有由BS4找到的<div>

這裏是有問題的代碼:

soup = make_soup(search_url) #dependent on another function, but works correctly 
listings = {} #initialize an empty dictionary 

listings_data = soup.find_all("div", "asset-container") 
#If I print 'listings_data' I get a list with all 20 <div>s 

for listing in listings_data: 
    listings['Address: %s' % soup.find("li", "address").string] = ['foo'] 

print listings 

返回:{u'Address: 310 Riverside Drive': ['foo']}

爲什麼我結束了一個字典只有一個鍵/值對?

回答

0

您在每次迭代中重寫相同的字典密鑰。這給了相同的密鑰,每次:

for listing in listings_data: 
    listings['Address: %s' % soup.find("li", "address").string] 

因爲soup.find("li", "address")將返回相同的值。您可能打算訪問for循環中的listing對象。如:

for listing in listings_data:  
    listings['Address: %s' % listing.find("li", "address").string] 
+0

非常感謝!我很尷尬,我錯過了 - 顯然我今天花了太多時間盯着電腦屏幕。 – jamesfacts 2014-12-05 04:39:15