url中的波斯字符和使用python urlopen()方法

时间:2018-04-27 10:53:22

标签: python python-3.x url urlopen farsi

我需要帮助将非ascii网址编码/解码为适当的格式以便提供urlopen()方法。我的代码用于从页面抓取url(非ascii url)并转到下一页:

from urllib.request import urlopen
from bs4 import BeautifulSoup
从Chrome浏览器中复制粘贴的

Enterance url

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,但我失败了! :-(

我很高兴你的支持和解决这个问题的指南。

1 个答案:

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