UnicodeEncodeError:“ ascii”编解码器无法对位置15-17处的字符进行编码:ord inal不在范围内(128)

时间:2018-07-09 10:26:59

标签: python python-3.x beautifulsoup python-unicode

我在运行以下代码时遇到了困难。

bucket_b

上面提到的代码读取一个csv文件,选择一个列,然后使用regex进行解析以在一行中获取所有超链接,然后使用BeautifulSoup通过Hyperlink进行解析以获取页面的“标题字符串”

现在,每当我运行此代码时,它将停止为特定的行工作,并引发错误“ UnicodeEncodeError:'ascii'编解码器无法在位置15-17处编码字符:序数不在range(128)内” < / p>

在这里如何使用Unicode字符串? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

错误消息表明问题发生在urllib.request.urlopen(url, context=ctx)中。似乎至少有一个网址包含非ASCII字符。

该怎么办?

您可以尝试引用URL:

html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()

这可以防止UnicodeEncodeError,但会以静默方式建立错误的网址,这很可能在以后导致问题。

我的建议是捕获UnicodeEncodeError并显示一条错误消息,该消息将帮助您了解幕后发生的情况以及如何进行实际修复:

for url in lst:
    try:
        html = urllib.request.urlopen(url, context=ctx).read()
        soup = BeautifulSoup(html, 'html.parser')
        title = soup.title.string
        ...
    except UnicodeEncodeError as e:
        print("Incorrect URL {}".format(url.encode('ascii', errors='backslashreplace')))

errors='backslashreplace'选项将转储有问题字符的代码