url中的波斯语字符并使用python urlopen()方法

url中的波斯语字符并使用python urlopen()方法,python,python-3.x,url,urlopen,farsi,Python,Python 3.x,Url,Urlopen,Farsi,我需要帮助将非ascii url编码/解码为适当的形式,以便输入urlopen()方法。我的代码用于从页面中抓取url(非ascii url)并转到下一页: from urllib.request import urlopen from bs4 import BeautifulSoup 从chrome浏览器粘贴的副本: url = 'https://www.sheypoor.com/%DA%A9%D9%85%D8%AF %D9%86%D9%88%D8%AC%D9%88%D8%A7%D9%86-

我需要帮助将非ascii url编码/解码为适当的形式,以便输入
urlopen()
方法。我的代码用于从页面中抓取url(非ascii url)并转到下一页:

from urllib.request import urlopen
from bs4 import BeautifulSoup
从chrome浏览器粘贴的副本:

url = 'https://www.sheypoor.com/%DA%A9%D9%85%D8%AF %D9%86%D9%88%D8%AC%D9%88%D8%A7%D9%86-34926671.html'
for i in range(1,10):
    html = urlopen(url)
    page = BeautifulSoup(html.read(), 'html.parser')
    url_obj = page.findAll('a')[13]['href'].strip()
    print(url_obj)
    url = url_obj
但我有一个错误:

'ascii' codec can't encode characters in position 5-9: ordinal not in range(128)
当我选中“UnicodeError”时,我看到了以下通知:

----> 8     html = urlopen(url)
正如您所知,在第一个循环中,urlopen()方法可以与“entrance url”一起使用,因为它的形式是:

https://www.sheypoor.com/%DA%A9%D9%85%D8%AF-%D9%86%D9%88%D8%AC%D9%88%D8%A7%D9%86-34926671.html
但是当从BeautifulSoup对象中刮取的
url\u obj

https://www.sheypoor.com/سرویس-تخت-کمد-نوجوان-44887762.html
替换为旧url,并且此表单不适合馈送到urlopen()方法:

我试图找到解决方案,将我的url_对象转换为正确的url格式,如Entrance url,但失败了<代码>:-(


我非常感谢您对解决此问题的支持和指导。

您可以使用类似的工具

from urllib.request import urlopen
from urllib.parse import quote
persian_url = 'https://www.isna.ir/news/99010100077/' + quote('حواشی-در-آکروباتیک-ژیمناستیک-بالا-گرفت-دبیر-هم-استعفا-کرد')
page = urlopen(persian_url)

url是:'https://www.isna.ir/news/99010100077/在15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15的的的的的的各各各各各各/p>您可以发布用于尝试将
url\u obj
转换为有效url的代码吗?url只允许包含有限字符集的字符,并且看起来t您正在将
href
值作为一个字符串,它将是unicode。您需要使用类似
urllib.quote()
的内容将该unicode转换为有效的URL。第一种方法是:URL_obj.encode(“UTF-8”),它将URL中的波斯语字符替换为“\xd8\xb3\xd8\xb1\xd9\x88\xdb\x8c\xd8\xb3-\xd8\xae\xd8\xaa-\xda\xa9\xd9\x85\xd8\xaf-\xd9\x88\xac\xd9\x88\xd8\xa7\xd9\x86”对于我从urlib.parse导入unquote(url\u obj)使用的第二种方法,在对字符串进行UTF编码后,仍然需要使用lib.quote将采用内部表示并将其设置为UTF-8,但这对于URL来说是不够的,它还需要URL引用(为您提供%)。因此,您可能需要
new_URL=urllib.quote(string.encode('UTF-8'))
您可以使用以下链接:[