首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美丽的汤没有正确解析xml标记,但lxml正确

美丽的汤没有正确解析xml标记,但lxml正确
EN

Stack Overflow用户
提问于 2020-02-08 22:41:29
回答 1查看 502关注 0票数 1

以下代码未按预期工作:

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
url = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi?retmode=xml&db=pmc'

response = requests.get(url)

soup = BeautifulSoup(response.text,'lxml')
links =  soup.find_all('link')

links结果产生了一堆`标签(只显示了一些):

代码语言:javascript
复制
<link/>
<name>pmc_sra</name>
<menu>SRA</menu>
<description>Links to SRA</description>
<dbto>sra</dbto>
<link/>
<name>pmc_structure</name>
<menu>Structure Links</menu>
<description>Published 3D structures</description>
<dbto>structure</dbto>
<link/>

打印response.text显示(仅显示部分打印):

代码语言:javascript
复制
<Link>
    <Name>pmc_sra</Name>
    <Menu>SRA</Menu>
    <Description>Links to SRA</Description>
    <DbTo>sra</DbTo>
</Link>
<Link>
    <Name>pmc_structure</Name>
    <Menu>Structure Links</Menu>
    <Description>Published 3D structures</Description>
    <DbTo>structure</DbTo>
</Link>
<Link>

重要的是,每个Link标签都包含其他标签,而漂亮汤建议链接标签是独立的。

如果我直接尝试lxml,我会得到正确的链接标记:

代码语言:javascript
复制
from lxml import etree
#root = etree.fromstring(response.text)
root = etree.fromstring(response.text.encode('utf-8'),parser=etree.XMLParser(encoding='utf-8'))

for link in root.iter("Link"):
    etree.dump(link)

产生:

代码语言:javascript
复制
<Link>
    <Name>pmc_sra</Name>
    <Menu>SRA</Menu>
    <Description>Links to SRA</Description>
    <DbTo>sra</DbTo>
</Link>

<Link>
    <Name>pmc_structure</Name>
    <Menu>Structure Links</Menu>
    <Description>Published 3D structures</Description>
    <DbTo>structure</DbTo>
</Link>

注意,我在使用更简单的etree.fromstring调用时遇到了一个错误。也许BeautifulSoup的问题是编码问题?

我使用的是Python3.7.6中最新的BeautifulSoup (4.8.2)和LXML (4.5.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-08 22:46:52

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser

我认为问题出在使用"lxml“而不是"lxml-xml”。如果我没记错,Beautiful Soup正试图将您的XML解析为HTML,并因此破坏数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60127851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档