1
rudy1224 2016-01-03 13:27:26 +08:00
第二行和第三行之间插一句
web.encoding='utf8' 手动指定编码 |
3
janeyuan 2016-01-03 18:04:16 +08:00
GBK 是 GB18030 的子集 也就是说 GBK 有些字符不能显示 推荐直接用 GB18030
soup = BeautifulSoup(response,from_encoding='GB18030') links = soup.find_all("td") for ins in links: if ins.get_text()!=None: fout.write("<td>%s</td>"% ins.get_text().decode('GB18030').strip()) |
4
ahxxm 2016-01-03 19:22:04 +08:00 1
requests.get().text 在 python2 里是 unicode , python3 里是 str (也是 unicode ), requests 会把网页内容(.content ,类型是 bytes)用 chardet 检测出的编码类型转换成 unicode ,然后给.text 这个 property 。
然而 windows 命令行的默认编码是 cp936 (好像是这么拼的),所以如果 chardet 抽风了, unicode 内容就不合理, print 时候就可能乱码或者报错,后者可能性更高一点。 有两个方法: 0 )你开个文件把爬到的东西写进去,完了用 sublime/notepad++之类的东西打开看看,能看就没错了; 1 )手动给 response.content 做 decode ,我这儿 win10+python3.4.2 , rsp.content.decode('utf-8') != rsp.text print(web.content.decode('utf-8')),我这个 win10 能正确在 cmd 中打印网页里的中文 |
5
ahxxm 2016-01-03 19:23:10 +08:00
上面说得不太准,是.text 这个 property 会调用 chardet 检测并自作聪明地返回结果……
|
6
Allianzcortex 2016-01-03 21:09:57 +08:00
如果可以用 print 输出正确显示的话那么就是 unicode 编码格式的问题了,有不同的解决方法,最直接的就是用 decode 和 encode 对网页内容进行各种转换
|