gpt4 book ai didi

python - 如何将扩展 ascii 与 bs4 url​​ 一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:03 25 4
gpt4 key购买 nike

我一直不愿意发布有关此问题的问题,但经过 3 天的谷歌搜索,我无法让它发挥作用。长话短说,我正在为魔兽世界制作一个突袭装备追踪器。

我使用 BS4 来处理网页抓取,我能够拉出页面并从中抓取我需要的信息。我遇到的问题是当玩家的名字中有扩展的 ascii 字符时,例如:thermíte。 (i 是 alt+161)

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

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

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”时,抓取函数会打印出“therm\xC3\xADte”,我所需要做的就是将“\x”替换为“%”,然后我就可以了是金色的。但这是行不通的。我可以使用 mastername.find('\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

这就是我一直用来尝试重建最终网址的方法(atm,我将保持领域不变,直到我可以解决名称问题)

Tldr:

我正在尝试获取带有扩展 ascii 的 url,例如:

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

并将其变成浏览器可以轻松处理的网址,例如:

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

包含所有正常的扩展 ascii 字符。

我希望这是有道理的。

这里是完整脚本 atm 的粘贴箱。自动柜员机里有一些东西直到后来才被使用。 pastebin link

最佳答案

结果 URL 中不应包含非 ASCII 字符。确保 mastername 是 Unicode 字符串(Python 3 上的 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

关于python - 如何将扩展 ascii 与 bs4 url​​ 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33359120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com