【问题标题】:tag contents not returning in beautifulsoup标记内容未在 beautifulsoup 中返回
【发布时间】:2017-06-07 23:36:58
【问题描述】:

我正在尝试提取以下字符串:

<item>
<dc:creator><![CDATA[Chris M]]></dc:creator>
<pubDate>Tue, 06 Jun 2017 07:38:23 +0000</pubDate>
</item>

我想用这个来称呼 Chris M 和其他作者:

soup = BeautifulSoup(response, "lxml")
items = soup.findAll("item")
            for i in items:
                 author = i.find('dc:creator')
                 print author

这个输出:

<dc:creator></dc:creator>

如何从标签中获取名称内容?

【问题讨论】:

  • 你试过creator而不是dc:creator吗?
  • @codekaizer 是的,它什么都不返回

标签: python beautifulsoup lxml


【解决方案1】:

BeautifulSoup 将 CData 识别为子类,因此您可以让它检查它的实例。

>>> from bs4 import BeautifulSoup, CData

>>> text = """<item>
<dc:creator><![CDATA[Chris M]]></dc:creator>
<pubDate>Tue, 06 Jun 2017 07:38:23 +0000</pubDate>
</item>"""
>>> soup = BeautifulSoup(text)
>>> for item in soup.findAll(text=True):
        if isinstance(item, CData):
            print(item)


Chris M

【讨论】:

    【解决方案2】:

    这适用于我使用 Python 3 - https://repl.it/languages/python3

    将解析器指定为xml

    import bs4 as bs
    content="""
    <collection>
        <item><dc:creator><![CDATA[Chris M]]></dc:creator></item>
        <item><dc:creator><![CDATA[Harris A]]></dc:creator></item>
    </collection>
    """
    
    soup = bs.BeautifulSoup(content, 'xml')
    
    items = soup.findAll("item")
    for i in items:
       author = i.find('creator')
       print(author.string)
    

    输出:

    Chris M
    Harris A
    

    【讨论】:

      猜你喜欢
      • 2012-12-27
      • 2018-01-25
      • 1970-01-01
      • 2023-03-16
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 2018-07-28
      相关资源
      最近更新 更多