Python:将二进制文件打印为字符串
我有一个爬虫,它解析给定站点的HMTL并打印部分源代码。这是我的剧本:Python:将二进制文件打印为字符串,python,Python,我有一个爬虫,它解析给定站点的HMTL并打印部分源代码。这是我的剧本: #!/usr/bin/env python # -*- encoding: utf-8 -*- from bs4 import BeautifulSoup import requests import urllib.request import re class Crawler: headers = {'User-Agent' : 'Mozilla/5.0'} keyword = 'arroz'
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from bs4 import BeautifulSoup
import requests
import urllib.request
import re
class Crawler:
headers = {'User-Agent' : 'Mozilla/5.0'}
keyword = 'arroz'
def extra(self):
url = "http://buscando.extra.com.br/search?w=" + self.keyword
r = requests.head(url, allow_redirects=True)
print(r.url)
html = urllib.request.urlopen(urllib.request.Request(url, None, self.headers)).read()
soup = BeautifulSoup(html, 'html.parser')
return soup.encode('utf-8')
def __init__(self):
extra = self.extra()
print(extra)
Crawler()
我的代码工作正常,但它在打印源代码时,在值之前有一个恼人的b'
。我已经尝试过使用解码('utf-8')
,但没有成功。有什么想法吗
更新
如果我不使用编码('utf-8')
我会出现以下错误:
Traceback (most recent call last):
File "crawler.py", line 25, in <module>
Crawler()
File "crawler.py", line 23, in __init__
print(extra)
File "c:\Python34\lib\encodings\cp850.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2030' in position
13345: character maps to <undefined>
回溯(最近一次呼叫最后一次):
文件“crawler.py”,第25行,在
爬虫
文件“crawler.py”,第23行,在_init中__
打印(额外)
文件“c:\Python34\lib\encodings\cp850.py”,第19行,编码
返回codecs.charmap\u encode(输入、自身错误、编码\u映射)[0]
UnicodeEncodeError:“charmap”编解码器无法将字符“\u2030”编码到位
13345:角色映射到
当我按照给定的方式运行代码时,除了将返回汤.encode('utf-8')
替换为返回汤
,它工作正常。我的环境:
- 操作系统:Ubuntu
15.10
- Python:
3.4.3
- python3 dist包bs4版本:
beautifulsoup4==4.3.2
cp850.py
,并且您的源代码正在访问一个.com.br
站点-这让我觉得shell的默认编码可能无法处理unicode字符。这是你的维基百科页面
您可以检查终端使用的默认编码:
>>> import sys
>>> sys.stdout.encoding
我的终端响应为:
'UTF-8'
我想你的不会,这是你遇到的问题的根源
编辑:
事实上,我可以通过以下方法完全复制您的错误:
>>> print("\u2030".encode("cp850"))
这就是问题所在-由于计算机的区域设置,print
隐式转换为系统的默认编码,并引发UnicodeDecodeError
从命令提示符更新窗口以显示unicode字符有点超出了我的驾驶室范围,因此我无法提供任何建议,只能指导您使用。那么您为什么在此处使用
encode
?尝试一下return-soup
。如果不这样做,它将返回以下错误:Traceback(最后一次调用):文件“crawler.py”,第25行,在crawler()文件“crawler.py”中,第23行,在uuu init_uuuuuuuuuu打印(额外)文件“c:\Python34\lib\encodings\cp850.py”中,第19行,在encode return codes.charmap\u encode中(输入,self.errors,encoding_map)[0]UnicodeEncodeError:“charmap”编解码器无法对13345位置的字符“\u2030”进行编码:字符映射到
字节
在Python 3中没有编码
方法,因此您从字符串开始,并将其转换为字节string@chucksmash使用编码('utf-8')
我已经停止了上面的错误。但是我已经创建了一个新错误:UnicodeEncodeError:“charmap”编解码器无法对13345位置的字符“\u2030”进行编码:字符映射到
。是的!它返回了cp850
。我该怎么办?我已经尝试了链接解决方案,但没有成功…谢谢。