【发布时间】:2021-04-25 07:15:02
【问题描述】:
我正在发送一个 http 请求并获得一个 http 响应,但我希望能够提取响应的正文并知道它是否包含 XML 或 HTML。
理想情况下,即使响应中的内容类型不明确,此方法也应该有效(即,它应该适用于不一定指定内容类型的网站)。
目前,我正在使用 lxml 来解析 html/xml,但在解析时不知道我是在处理 HTML 还是 XML。
【问题讨论】:
我正在发送一个 http 请求并获得一个 http 响应,但我希望能够提取响应的正文并知道它是否包含 XML 或 HTML。
理想情况下,即使响应中的内容类型不明确,此方法也应该有效(即,它应该适用于不一定指定内容类型的网站)。
目前,我正在使用 lxml 来解析 html/xml,但在解析时不知道我是在处理 HTML 还是 XML。
【问题讨论】:
我不明白您为什么要这样做,但我确信有更好的方法可以做到。但是……
xml和html的区别在于声明,HTML必须以<!DOCTYPE HTML>开头,XML以<?xml version="1.0>开头
XML 示例
<?xml version="1.0>
<address>
<name> Krishna Rungta</name>
<contact>9898613050</contact>
<email>krishnaguru99@gmail.com </email>
<birthdate>1985-09-27</birthdate>
</address>
HTML 示例
<!DOCTYPE html>
<html>
<head>
<title> Page title </title> </head>
<body>
<hl> First Heading</hl> <p> First paragraph.</p> </body>
</html>
如果我是你,我会使用 BeautifulSoup 来选择 DOCTYPE,如果你找不到/选择它意味着它是 XML。你可以看到如何做到这一点here。
【讨论】:
您可以查看content-type 标头以了解您收到的响应类型:
import requests
respond = requests.get(URL)
file_type = respond.headers['content-type']
print(file_type)
>>>'text/html; charset=utf-8'
你也可以这样做
print(file_type.split(';')[0].split('/')[1])
获取"html" 或"xml" 作为输出
【讨论】: