';charmap';尝试使用Beauty Soup-Python提取html页面时出现编解码器错误

';charmap';尝试使用Beauty Soup-Python提取html页面时出现编解码器错误,python,beautifulsoup,Python,Beautifulsoup,当我尝试使用下面的代码加载任何页面时,它只抓取标签,而不是整个html等等 import requests from bs4 import BeautifulSoup page = requests.get('http://www.tushmedia.com/') soup = BeautifulSoup(page.content, 'lxml-xml') print(soup.prettify()) 但是如果我删除“xml”并只保留soup=BeautifulSoup(page.conte

当我尝试使用下面的代码加载任何页面时,它只抓取标签,而不是整个html等等

import requests
from bs4 import BeautifulSoup

page = requests.get('http://www.tushmedia.com/')
soup = BeautifulSoup(page.content, 'lxml-xml')
print(soup.prettify())
但是如果我删除“xml”并只保留
soup=BeautifulSoup(page.content,'lxml')
它将生成一个错误:

“charmap”编解码器无法对位置11051中的字符u'\u2019'进行编码:字符映射到


这是因为当我删除“xml”部分时,它不会获取xml,也不会生成输出,当它试图获取HTML时,它会生成此错误。我想这是关于UTF-8编码的问题,但是你知道如何解决这个问题吗?

如果你需要获取整个html,你需要使用
html.parser

from bs4 import BeautifulSoup
import requests

url = 'http://www.tushmedia.com/'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

print(soup.prettify)
我使用
lxmlxml
xml
运行了您的代码,它只返回了

照你说的头。没有错误。

尝试将其编码为utf-8:

import requests
from bs4 import BeautifulSoup

page = requests.get('http://www.tushmedia.com/')
soup = BeautifulSoup(page.content, 'lxml')
print(soup.prettify().encode('utf-8'))

这与直觉相反,但是

  • “lxml”
    是一个
    HTML
    解析器,而

  • “lxml”
    是一个
    xml
    解析器

u'\u2019'
是右引号字符(花式,卷曲),在ASCII表中没有表示形式

BeautifulSoup使用名为
Unicode,Dammit
的子库来检测文档的编码并将其转换为
Unicode
。自动检测到的编码作为
美化组
对象的
原始编码
属性提供

unicodemamit
大部分时间猜测正确,但有时会出错。有时,它猜测正确,但仅在对文档进行逐字节搜索(这需要很长时间)之后

因此,您可以将
from_encoding=
参数添加到构造函数中:

soup = BeautifulSoup(page.content, 'lxml-xml', from_encoding='utf-8')

是的,你是对的,我以前尝试过使用“html.parser”,但它不起作用,我想我可能写错了什么。但是,当我使用BeautifulSoup(page.content,'lmxlxml')时,内容有一个完美的结构,没有办法对其余的标记进行同样的处理?不使用html.parse?例如,如果我为这个特定的站点执行下面的代码:那么我将以良好的结构打印我想要的所有html:
import requests from bs4 import BeautifulSoup page=requests.get('https://www.proxynova.com/proxy-server-list/country-fr/“)汤=BeautifulSoup(page.content,'lxml')打印(soup.prettify())
事实上,正如错误显示的
无法对字符u'\u2019'
进行编码,怀疑默认编码不是“utf-8”,然后产生了这个想法。你知道如何忽略这个错误,或者避免我的程序因此停止吗?你尝试过我的答案吗?是的,它成功了,但是,使用这样的硬代码来解决这个问题可以吗?问题是,它与默认的
打印编码相关,它将尝试将所有unicode内容编码为您的编码类型,在转换过程中,您的编码引发了错误。您可以使用
utf-8
,这是一种字符编码,能够对Unicode定义的所有可能字符进行编码。如果我的答案是解决方案,请将它标记为正确答案,即使它是否决票。是的,你是对的,你知道我如何避免这个问题,因为它停止了程序。我扩展了我的答案,希望它能帮助你。当然,我支持你的问题。我认为您的示例中有一个小错误,代码是
soup=BeautifulSoup(page.content,'lxml',from_encoding='utf-8')
你说得对,省略了撇号。。。我将在我的回答中修正它。谢谢你的投票。