如何将扩展ascii与bs4 u一起使用

2024-09-29 23:30:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直不愿意发表一个关于这个问题,但经过3天的谷歌我不能得到这个工作。长话短说,我正在为魔兽世界制作一个raid装备追踪器。你知道吗

我用BS4来处理网页垃圾,我可以拉网页和刮的信息,我需要从它。我遇到的问题是,玩家的名字中有一个扩展的ascii字符,例如:thermíte。(i是alt+161)

http://us.battle.net/wow/en/character/garrosh/thermíte/advanced

我正在尝试找出如何重新编码url,使其更像这样:

http://us.battle.net/wow/en/character/garrosh/therm%C3%ADte/advanced

我使用tkinter作为gui,我让用户从下拉列表中选择他们的领域,然后在一个输入字段中键入字符名。你知道吗

namefield = Entry(window, textvariable=toonname)

我有一个刮功能,执行主配置文件页面的初始刮。在这里,我将namefield的值赋给一个全局变量

namefield = Entry(window, textvariable=toonname, command=firstscrape)

我想我已经接近了,因为当它通过“thermíte”时,scrape函数会打印出“therm\xC3\xADte”,我所需要做的就是用“%”替换“\x”,我就变成了黄金。但这行不通。我可以用mastername.查找('\x'),它会在字符串中找到它的实例,但是mastername.replace('\x','%')实际上不会替换任何内容。你知道吗

我试过r'\x'\%'r'\x'等的各种组合。没有骰子。你知道吗

最后,当我试图做一些事情,如编码成拉丁语,然后解码回utf-8,我得到的错误,它如何不能处理扩展ascii字符。你知道吗

urlpart1 = "http://us.battle.net/wow/en/character/garrosh/"
urlpart2 = mastername
urlpart3 = "/advanced"
url = urlpart1 + urlpart2 + urlpart3

这就是我用来尝试重建最终url的方法(在修复名称问题之前,我将保持领域不变)

Tldr公司:

我正在尝试使用扩展ascii的url,例如:

http://us.battle.net/wow/en/character/garrosh/thermíte/advanced

它变成了一个浏览器可以轻松处理的url,比如:

http://us.battle.net/wow/en/character/garrosh/therm%C3%ADte/advanced

使用所有正常的扩展ascii字符。你知道吗

我希望这是有意义的。你知道吗

这是一个完整的脚本atm粘贴箱。有一些东西,在它的自动取款机是没有利用,直到后来。pastebin link


Tags: httpurlnetascii字符advancedenus
2条回答

您可以尝试以下方法:

>>> import urllib
>>> 'http://' + '/'.join([urllib.quote(x) for x in url.strip('http://').split('/')]
'http://us.battle.net/wow/en/character/garrosh/therm%C3%ADte/advanced'

urllib.quote()“安全”URL对字符串的字符进行编码。您不希望所有字符都受到影响,只希望“/”字符之间的所有字符都受到影响,不包括初始的“http://”。所以strip和split函数把它们从方程中去掉,然后用+操作符和join把它们连接起来

编辑:这是我的责任,因为我没有阅读文档。。。更干净:

>>> url = 'http://us.battle.net/wow/en/character/garrosh/therm%C3%ADte/advanced'
>>> urllib.quote(url, safe=':/')
'http://us.battle.net/wow/en/character/garrosh/therm%25C3%25ADte/advanced'

结果url中不应包含非ascii字符。确保mastername是Unicode字符串(在Python3上为isinstance(mastername, str)):

#!/usr/bin/env python3
from urllib.parse import quote

mastername = "thermíte"
assert isinstance(mastername, str)
url = "http://us.battle.net/wow/en/character/garrosh/{mastername}/advanced"\
        .format(mastername=quote(mastername, safe=''))
# -> http://us.battle.net/wow/en/character/garrosh/therm%C3%ADte/advanced

相关问题 更多 >

    热门问题