我试图使用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']}
为什么我最终只得到一个只有一个键/值对的字典?
答案 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]