我需要帮助将非ascii网址编码/解码为适当的格式以便提供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)
当我检查" UnicodeEncodeError"时,我看到了这个通知:
----> 8 html = urlopen(url)
正如您所知道的那样:在第一个循环中,urlopen()方法可以使用" enterance 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_obj
以
https://www.sheypoor.com/سرویس-تخت-کمد-نوجوان-44887762.html
替换为旧的url,此表单不适合提供给urlopen()方法:
我试图找到将我的url_object转换为正确的url表单的解决方案,例如enterance url,但我失败了! :-(
我很高兴你的支持和解决这个问题的指南。
答案 0 :(得分:0)
你可以使用这样的东西
from urllib.request import urlopen
from urllib.parse import quote
persian_url = 'https://www.isna.ir/news/99010100077/' + quote('حواشی-در-آکروباتیک-ژیمناستیک-بالا-گرفت-دبیر-هم-استعفا-کرد')
page = urlopen(persian_url)
网址是:'https://www.isna.ir/news/99010100077/حواشی-در-آکروباتیک-ژیمناستیک-بالا-گرفت-دبیر-هم-ههه