在python中,UnicodeError:';ascii';编解码器可以';对位置15-18的字符进行t编码:不在范围内(128)

在python中,UnicodeError:';ascii';编解码器可以';对位置15-18的字符进行t编码:不在范围内(128),python,Python,在这部分代码中,我从(url.txt)文件中存储的url中获取了大量url 但是当代码面对非英语URL时,它会中断并给出错误 有没有简单的代码来解决这个问题?谢谢 from bs4 import BeautifulSoup as soup from urllib.request import urlopen as uReq page_url = "url.txt" with open("url.txt", "r") as fr: for url in map(lambda x: x.

在这部分代码中,我从(url.txt)文件中存储的url中获取了大量url 但是当代码面对非英语URL时,它会中断并给出错误

有没有简单的代码来解决这个问题?谢谢

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq

page_url = "url.txt"

with open("url.txt", "r") as fr:
    for url in map(lambda x: x.strip(), fr.readlines()): 
      print(url)
      uClient = uReq(url)
      page_soup = soup(uClient.read(), "html.parser")


      # the rest logic
完整错误消息

E:\Desktop>question.py
Traceback (most recent call last):
  File "E:\Desktop\question.py", line 12, in <module>
    uClient = uReq(url)
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py", line 525, in open
    response = self._open(req, data)
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py", line 502, in _call_chain
    result = func(*args)
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py", line 1362, in https_open
    return self.do_open(http.client.HTTPSConnection, req,
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py", line 1319, in do_open
    h.request(req.get_method(), req.selector, req.data, headers,
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t.py", line 1230, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t.py", line 1241, in _send_request
    self.putrequest(method, url, **skips)
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t.py", line 1096, in putrequest
    self._output(self._encode_request(request))
  File "C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t.py", line 1176, in _encode_request
    return request.encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-18: ord
inal not in range(128)
E:\Desktop>question.py
回溯(最近一次呼叫最后一次):
文件“E:\Desktop\question.py”,第12行,在
uClient=uReq(url)
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py”,urlopen中的第222行
返回opener.open(url、数据、超时)
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py”,第525行,开放式
响应=自身打开(请求,数据)
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py”,第542行,未清
结果=self.\u调用\u链(self.handle\u打开,协议,协议+
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py“,呼叫链中第502行
结果=func(*args)
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py”,第1362行,https_open
返回self.do_open(http.client.HTTPSConnection,req,
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\urllib\req
uest.py”,第1319行,在do_open中
h、 请求(请求获取方法()、请求选择器、请求数据、标题、,
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t、 py”,请求中的第1230行
self.\u发送\u请求(方法、url、正文、标题、编码\u分块)
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t、 py“,发送请求中的第1241行
putrequest(方法、url、**跳过)
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t、 py”,第1096行,请求中
self.\u输出(self.\u编码\u请求(请求))
文件“C:\Users\A-Data\AppData\Local\Programs\Python\Python38-32\lib\http\clien
t、 py”,第1176行,输入编码请求
返回请求。编码('ascii')
UnicodeEncodeError:“ascii”编解码器无法对位置15-18:ord中的字符进行编码
不在范围内(128)

如果需要简单的修复,请使用模块而不是
urllib
。它隐式地转换Unicode URL,因此您不必这样做

从bs4导入BeautifulSoup作为汤
导入请求
page_url=“url.txt”
以open(“url.txt”、“r”)作为fr:
对于地图中的url(lambda x:x.strip(),fr.readlines()):
打印(url)
response=requests.get(url)
page_soup=soup(response.text,“html.parser”)

这能回答你的问题吗?我确实读了另一篇文章,但对我的代码应该添加什么感到困惑使用
urllib.parse.quote
使用urllib.parse.quote当有一个url时很好,但我有很多你是天才,问题解决了,非常感谢你