【问题标题】:findAll() in BeautifulSoup missing nodesBeautifulSoup 中的 findAll() 缺少节点
【发布时间】:2013-07-16 11:22:09
【问题描述】:

BeautifulSoup 中的 findAll() 方法不会返回 XML 中的所有元素。如果您查看下面的代码并打开 URL,您可以看到 XML 中有 10 个 PubmedArticle 节点。但是 findAll 方法只能找到其中的 6 个。输出上只有 6 * 而不是 10。我做错了什么?

import urllib2
from bs4 import BeautifulSoup

URL = 'http://www.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&rettype=abstract&id=23858559,23858558,23858557,23858521,23858508,23858506,23858494,23858473,23858461,23858404'
data = urllib2.urlopen(URL).read()

soup = BeautifulSoup(data)

for x in soup.findAll('pubmedarticle'):
    print '*'

【问题讨论】:

  • 您的代码适用于我并打印 10 * chars。
  • 尝试将lxml 解析器与beautifulsoup 一起使用:soup = BeautifulSoup(data, "lxml")(确保已安装lxml)。
  • 那么,为什么不直接使用lxml呢? ^^(别开玩笑了,它有很棒的 xpath 支持)。

标签: python-2.7 beautifulsoup findall


【解决方案1】:

我通过添加xml 参数解决了这个问题。确保您已安装 lxml

soup = BeautifulSoup(xmlData, 'xml')

【讨论】:

    【解决方案2】:

    编辑:我发现'findAll'是相对于当前节点的,你可以用soup设置根节点。

    提供的 xml 中的实体名为“PubMedArticle”,因此请尝试以下操作:

    for x in soup.pubmedarticleset.findAll('pubmedarticle'):
        print '*'
    

    【讨论】:

    • 是的,我知道。但如果我这样做,我什么都得不到。所以我故意使用小写字母。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多