Персидские символы в url и работа с методом python urlopen () - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужна помощь для кодирования / декодирования не-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 входа, но мне не удалось! :-(

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

...