BeautifulSoup误解了<area />标签

时间:2014-07-29 21:27:44

标签: python beautifulsoup

我正在使用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 个答案:

答案 0 :(得分: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>