【问题标题】:BeautifulSoup - Help me pick out divs and classesBeautifulSoup - 帮我挑选 div 和类
【发布时间】:2011-08-04 20:29:36
【问题描述】:

这是我的 HMTL 代码:

<div class="BlockA">
    <h4>BlockA</h4>
    <div class="name">John Smith</div>
    <div class="number">2</div>
    <div class="name">Paul Peterson</div>
    <div class="number">14</div>
</div>

<div class="BlockB">
    <h4>BlockB</h4>
    <div class="name">Steve Jones</div>
    <div class="number">5</div>
</div>

通知BlockA 和BlockB。两者都包含相同的元素,即name 和number,但在单独的类中。我是 python 新手,正在考虑尝试类似的方法:

parsedHTML = soup.findAll("div", attrs={"name" : "number"})

但这只会给我一个空白屏幕。我是否可以从blockA 中执行findAll,显示数据,然后从BlockB 开始另一个循环并执行相同操作?

谢谢。

编辑:对于那些询问的人,我想简单地循环遍历 JSON 中的值和输出,如下所示:

BlockA
    John Smith
    2
    Paul Peterson
    14

BlockB
    Steve Whoever
    123
    Mr Whathisface
    23

【问题讨论】:

  • 你还没有告诉我们你想做什么! ;-)
  • attrs={"name" : "number"} 你想要什么????也许您想仔细阅读 BeautifulSoup(!)并使用 {'class' : 'number'} 或其他什么......

标签: python html json beautifulsoup


【解决方案1】:

您要查找包含“name”或“number”类属性的 div?

>>> import re
>>> soup.findAll("div", {"class":re.compile("name|number")})

[<div class="name">John Smith</div>, <div class="number">2</div>, <div class="name">Paul Peterson</div>, <div class="number">14</div>, <div class="name">Steve Jones</div>, <div class="number">5</div>]

【讨论】:

    【解决方案2】:

    您需要使用可能的class 值列表。

    soup.findAll('div', {'class': ['name', 'number']})
    

    看到您的编辑后:

    def grab_content(heading):
        siblings = [s.contents[0] for s in heading.findNextSiblings()]
        return {heading.contents[0]: siblings}
    
    headings = soup.findAll('h4')
    [grab_content(h) for h in headings]
    

    原始 HTML sn-p 的输出将是:

    [{u'BlockA': [u'John Smith', u'2', u'Paul Peterson', u'14']},
     {u'BlockB': [u'Steve Jones', u'5']}]
    

    【讨论】:

    • 感谢您的回复。如果我做一个finadAll(h4),当我在最后使用return HttpResponse(h) 和return HttpResponse(h.content) 输出时只返回BlockB,则返回无。有什么我想念的吗?
    猜你喜欢
    • 2021-08-02
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2017-07-31
    相关资源
    最近更新 更多