Персидские символы в url и работа с методом python urlopen()

Мне нужна помощь для кодирования / декодирования не-ascii URL в соответствующую форму для кормления urlopen() метод. Мой код для удаления URL (не ascii URL) со страницы и перехода на следующую страницу:

from urllib.request import urlopen
from bs4 import BeautifulSoup

URL входа, скопированный из браузера 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

Но проблема начнется, когда url_obj, который извлечен из объекта BeautifulSoup, находится в форме

https://www.sheypoor.com/سرویس-تخت-کمد-نوجوان-44887762.html

заменен на более старый URL, и эта форма не подходит для подачи в метод urlopen():

Я пытался найти решение для преобразования моего url_object в правильную форму URL, такую ​​как URL входа, но мне не удалось! :-(

Я был бы очень рад за вашу поддержку и руководство для решения этой проблемы.

1 ответ

вы могли бы использовать что-то вроде этого

      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/حواشی-در-آکروباتیک-ژیمناستیک-بالا-گرفت-دبیر-هم-استعفا-کرد.

Другие вопросы по тегам