【问题标题】:Iterating through an object returned by Beautiful Soup遍历 Beautiful Soup 返回的对象
【发布时间】:2014-12-05 04:09:02
【问题描述】:

我正在尝试使用 BS4 在 Python 中创建一个简单的网络爬虫,但我显然犯了一个新手错误。

我是 working with a URL,它有 20 个 <div> 标记,每个标记都包含 4 个 <li> 标记,我想将其放入字典中,以便最后三个值位于以第一个值。为了简化代码,我将其删减为仅获取第一个 <li>

我的问题是循环代码似乎没有遍历 BS4 找到的所有 <div>s。

这是有问题的代码:

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']}

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

【问题讨论】:

    标签: python python-2.7 loops beautifulsoup


    【解决方案1】:

    您在每次迭代中都覆盖了相同的字典键。这每次都会给出相同的密钥:

    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]
    

    【讨论】:

    • 非常感谢!我很尴尬我错过了 - 显然我今天花了太多时间盯着电脑屏幕。
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多