首页 > 解决方案 > url 中的波斯字符和使用 python urlopen() 方法

问题描述

我需要帮助将非 ascii url 编码/解码为适当的馈送urlopen()方法形式。我从页面抓取 url(非 ascii url)并转到下一页的代码:

from urllib.request import urlopen
from bs4 import BeautifulSoup

从 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)的解决方案,但我失败了!:-(

我会很高兴您的支持和指导来解决这个问题。

标签: pythonpython-3.xurlurlopenfarsi

解决方案


你可以使用这样的东西

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


推荐阅读