我在运行以下代码时遇到了困难。
bucket_b
上面提到的代码读取一个csv文件,选择一个列,然后使用regex进行解析以在一行中获取所有超链接,然后使用BeautifulSoup通过Hyperlink进行解析以获取页面的“标题字符串”
现在,每当我运行此代码时,它将停止为特定的行工作,并引发错误“ UnicodeEncodeError:'ascii'编解码器无法在位置15-17处编码字符:序数不在range(128)内” < / p>
在这里如何使用Unicode字符串? 任何帮助将不胜感激。
答案 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'
选项将转储有问题字符的代码