Мне нужна помощь для кодирования / декодирования не-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 () может работать с "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 входа, но мне не удалось! :-(
Я был бы очень рад за вашу поддержку и руководство по решению этой проблемы.