[英]Python BeautifulSoup output unusual spacing and characters
我是 python 的新手。
我尝试使用 BeautifulSoup 解析来自网站的数据,我之前已经成功使用过 BeautifulSoup。 然而,对于这个特定的网站,返回的数据在每个字符之间都有空格,并且还有很多“>”字符。
奇怪的是,如果复制页面源并将其添加到我的本地 apache 实例并向我的本地副本发出请求,那么 output 是完美的。 我应该提到我的本地和网站之间的区别:
import requests
from requests_ntlm import HttpNtlmAuth
from bs4 import BeautifulSoup
r = requests.get("http://WEBSITE/CONTEXT/",auth=HttpNtlmAuth('DOMAIN\USER','PASS'))
content = r.text
soup = BeautifulSoup(content, 'lxml')
print(soup)
看起来本地服务器返回使用 UTF-8 编码的内容,而主网站使用 UTF-16。 这表明主网站配置不正确。 但是,可以使用代码解决此问题。
Python 默认请求编码为 UTF-8。 (我相信)这是基于响应头的。 该请求有一个名为visible_encoding的方法,它读取 stream 并使用chardet检测正确的编码。 但是,除非指定,否则不会消耗明显的编码。
因此,通过设置r.encoding = r.apparent_encoding ,请求应该在两个环境中正确下载文本。
代码应类似于:
r = requests.get("http://WEBSITE/CONTEXT/",auth=HttpNtlmAuth('DOMAIN\USER','PASS'))
r.encoding = r.apparent_encoding # Override the default encoding
content = r.text
r.raise_for_status() # Always check for server errors before consuming the data.
soup = BeautifulSoup(content, 'lxml')
print(soup.prettify()) # Should match print(content) (minus indentation)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.