迭代Beautiful Soup返回的对象

时间:2014-12-05 04:09:03

标签: python python-2.7 loops beautifulsoup

我试图使用BS4在Python中创建一个简单的Web抓取工具,而且我明显犯了一个菜鸟错误。

working with a URL有二十个<div>个标签,每个标签都包含一个我想要放入字典的<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']}

为什么我最终只得到一个只有一个键/值对的字典?

1 个答案:

答案 0 :(得分: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]