首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用提取html页面时出现的“‘charmap”编解码错误

使用提取html页面时出现的“‘charmap”编解码错误
EN

Stack Overflow用户
提问于 2017-05-15 11:42:51
回答 3查看 1.7K关注 0票数 1

当我试图使用下面的代码加载任何页面时,它只是抓取标记<"head">而不是整个html等等。

代码语言:javascript
运行
复制
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编码问题,但有什么办法解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-15 11:51:54

尝试将其编码为utf-8

代码语言:javascript
运行
复制
import requests
from bs4 import BeautifulSoup

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

Stack Overflow用户

发布于 2017-05-15 12:22:31

这是相反的直觉,但是

  • "lxml"是一种HTML解析器,而
  • "lxml-xml"是一个XML解析器

u'\u2019'是正确的引号字符(花式,卷曲),它在ASCII表中没有表示。

BeautifulSoup使用一个名为Unicode, Dammit的子库来检测文档的编码并将其转换为Unicode。自动检测到的编码可以作为.original_encoding对象的BeautifulSoup属性使用.

大多数情况下,UnicodeDammit猜测都是正确的,但有时也会出错。有时,它会正确地猜测,但只在对需要很长时间的文档进行逐字节搜索之后才进行猜测。

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

代码语言:javascript
运行
复制
soup = BeautifulSoup(page.content, 'lxml-xml', from_encoding='utf-8')
票数 1
EN

Stack Overflow用户

发布于 2017-05-15 11:51:50

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

代码语言:javascript
运行
复制
from bs4 import BeautifulSoup
import requests

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

print(soup.prettify)

我用lxml-xmlxml运行了您的代码,它只返回了

照你说的去吧。没有任何错误。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43978612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档