UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-17: ord inal not in range(128)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-17: ord inal not in range(128)
我很难运行编写以下代码。
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
import re
import csv
file = open("Test.CSV", "r")
reader = csv.reader(file)
for line in reader:
text = line[5]
lst = re.findall('(http.?://[^\s]+)', text)
if not lst: print('Empty List')
else:
try:
for url in lst:
html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
title = soup.title.string
str_title = str (title)
if 'Twitter' in str_title:
if len(lst) > 1: break
else: continue
else:
print (str_title, ',', url)
except urllib.error.HTTPError as err:
if err.code == 404:
print ('Invalid Twitter Link')
上面提到的代码读取一个 csv 文件,选择一列,然后使用正则表达式解析它以获取一行中的所有超链接,然后我使用 BeautifulSoup 解析超链接以获取 'Title String' 的页面。
现在,每当我 运行 这段代码时,它会停止为特定行工作,并抛出错误 "UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-17: ordinal not in range(128)"
如何使用此处的 Unicode 字符串?
任何帮助将不胜感激。
错误信息显示问题发生在urllib.request.urlopen(url, context=ctx)
。看起来至少有一个 URL 包含非 ASCII 字符。
怎么办?
你可以尝试引用URL:
html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
这将防止 UnicodeEncodeError
,但会默默地构建一个错误的 url,这可能会导致以后出现问题。
我的建议是捕获 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'
选项将转储违规字符的代码
我很难运行编写以下代码。
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
import re
import csv
file = open("Test.CSV", "r")
reader = csv.reader(file)
for line in reader:
text = line[5]
lst = re.findall('(http.?://[^\s]+)', text)
if not lst: print('Empty List')
else:
try:
for url in lst:
html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
title = soup.title.string
str_title = str (title)
if 'Twitter' in str_title:
if len(lst) > 1: break
else: continue
else:
print (str_title, ',', url)
except urllib.error.HTTPError as err:
if err.code == 404:
print ('Invalid Twitter Link')
上面提到的代码读取一个 csv 文件,选择一列,然后使用正则表达式解析它以获取一行中的所有超链接,然后我使用 BeautifulSoup 解析超链接以获取 'Title String' 的页面。
现在,每当我 运行 这段代码时,它会停止为特定行工作,并抛出错误 "UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-17: ordinal not in range(128)"
如何使用此处的 Unicode 字符串? 任何帮助将不胜感激。
错误信息显示问题发生在urllib.request.urlopen(url, context=ctx)
。看起来至少有一个 URL 包含非 ASCII 字符。
怎么办?
你可以尝试引用URL:
html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
这将防止 UnicodeEncodeError
,但会默默地构建一个错误的 url,这可能会导致以后出现问题。
我的建议是捕获 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'
选项将转储违规字符的代码