当我试图使用下面的代码加载任何页面时,它只是抓取标记<"head">而不是整个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编码问题,但有什么办法解决这个问题吗?
发布于 2017-05-15 03:51:54
尝试将其编码为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'))
发布于 2017-05-15 04:22:31
这是相反的直觉,但是
"lxml"
是一种HTML
解析器,而"lxml-xml"
是一个XML
解析器u'\u2019'
是正确的引号字符(花式,卷曲),它在ASCII表中没有表示。
BeautifulSoup使用一个名为Unicode, Dammit
的子库来检测文档的编码并将其转换为Unicode
。自动检测到的编码可以作为.original_encoding
对象的BeautifulSoup
属性使用.
大多数情况下,UnicodeDammit
猜测都是正确的,但有时也会出错。有时,它会正确地猜测,但只在对需要很长时间的文档进行逐字节搜索之后才进行猜测。
因此,可以将from_encoding=
参数添加到构造函数中:
soup = BeautifulSoup(page.content, 'lxml-xml', from_encoding='utf-8')
发布于 2017-05-15 03:51:50
如果需要获取整个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)
我用lxml-xml
和xml
运行了您的代码,它只返回了
照你说的去吧。没有任何错误。
https://stackoverflow.com/questions/43978612
复制相似问题