首页 文章

BeautifulSoup误解了<area>标签

提问于
浏览
1

我正在使用beautifulsoup从烟草文件中提取元数据,如下所示:http://legacy.library.ucsf.edu/tid/bxf03e00/xml

soup = BeautifulSoup(input)
meta_data = soup.document.metadata

这可以正确识别除以外的所有标签

<area>GEE,ED/OFFICE; N408</area>

美丽的汤将区域标记识别为两个单独的标记:

  • 区域标记 <area></area> 为空 .

  • 内容为 GEE,ED/OFFICE; N408 的空标记

是否会发生此错误,因为 <area> 是HTML标记?我怎样才能获得美丽的汤来正确识别 GEE,ED/OFFICE; N408 作为 <area> 标签的内容?

1 回答

  • 1

    核心问题是你没有告诉 bs4 它正在解析XML . 它假设HTML - 打印出来并注意解析器如何包装 <html><body> 标签中的所有内容 .

    import requests
    
    req = requests.get('http://legacy.library.ucsf.edu/tid/bxf03e00/xml')
    
    doc = req.text
    
    BeautifulSoup(doc).find('area')
    Out[79]: <area></area>
    

    告诉它它应该将其解析为XML(它将使用 lxml 来执行此操作,您需要安装该依赖项,否则这将失败):

    BeautifulSoup(doc,'xml').find('area')
    Out[80]: <area>GEE,ED/OFFICE; N408</area>
    

相关问题