UnicodeEncodeError: 'ascii' codec can't encode character

根据书本Web Scraping with Python: Collecting Data from the Modern
其中chart 3的例子,运行后提示错误如下:

UnicodeEncodeError: 'ascii' codec can't encode character '\xa0' in position 585: ordinal not in range(128)

原因是在于 查看了下,是在于print(bsObj.find(id="mw-content-text").findAll("p")[0])

网上也有一些解决的办法,大部分都说是print的限制问题,比如

http://blog.csdn.net/jim7424994/article/details/22675759

但是按照这个方法还是无法解决问题,不过他上面的例子倒是正常编译执行
请教各位大概是如何解决的?有没有参考办法

代码如下:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re,urllib


pages = set()
def getLinks(pageUrl):
    global pages
    html = urlopen("http://en.wikipedia.org"+pageUrl)
    bsObj = BeautifulSoup(html)
    try:
        print(bsObj.h1.get_text())
        print(bsObj.find(id="mw-content-text").findAll("p")[0])
        print(bsObj.find(id="ca-edit").find("span").find("a").attrs['href'])
    except AttributeError:
        print("this page is missing somthing! No worries though!")

    for link in bsObj.find("a",href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                newPage = link.attrs['href']
                print("--------------\n"+newPage)
                pages.add(newPage)
                getLinks(newPage)
getLinks("")

已经完成是关于print 的问题
解决办法如下
import io
import sys

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')

阅读 10.9k
1 个回答

题主都搞定了。我借个楼:)
在python3.6文件写中文遇到了同样的问题。(英文没问题)

fp=open('analyse_data.log', 'a+')
fp.write('中文')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

但是在命令行中又可以正常写入中文。
目测是命令行的默认编码为utf8吧。
在文件中手动指定编码就可以了。
open('analyse_data.log', 'a+', encoding='utf8')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进