python - 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)的解决方案,但我失败了!:-(
我会很高兴您的支持和指导来解决这个问题。
解决方案
你可以使用这样的东西
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/حواشی-در-آکروباتیک-ژیمناستیک-بالا-گرفت-دبیر-هم-استعفا-کرد'
推荐阅读
- encryption - 管理服务器集群的 GPG 密钥
- javascript - 如何在 JavaScript 中使用来自 Django 的 {{key}}
- python - 使用单选按钮调用方法
- python - 在 python 中,我无法使用用户输入执行函数
- python-3.x - 在绘制 pandas 数据透视表标题和子标题时合并到 python/pandas
- javascript - 在 request.get 节点调用中获取布尔返回
- c - C 等效于 Python None 类型
- r - R中简单列汇总函数的代码审查
- java - 如何在firestore中获取集合的名称列表?
- python - 在 python asyncio 中,是否可以在不等待完成的情况下调用另一个任务?