Персидские символы в 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/حواشی-در-آکروباتیک-ژیمناستیک-بالا-گرفت-دبیر-هم-استعفا-کرد.