【问题标题】:How to fix complicated HTML encoding for URL in python script?如何修复python脚本中URL的复杂HTML编码?
【发布时间】:2013-08-16 20:54:20
【问题描述】:

我手头有一个噩梦般的情况(或者可能很容易,我不知道)...所以我有一个在相当大的 python 脚本中运行的小函数...我已经解决了所有问题更大的脚本,最后脚本将调用我们的网络地图服务并显示有问题的地块……我们有 20K 地块,其中只有 10 个地块在 Deedholder 名称中有“%”。所以这在 99% 的时间内都有效,但总是只有 1%(或者在这种情况下更少)

问题是,在极少数情况下,deedholder 名称中有百分号,当我提供 url 时,它找不到查询。所以我测试了很多名字,只有名字中有百分号时才行不通。

所以前缀看起来像这样:

'https://cedar.integritygis.com/default.aspx?ql=Parcel&qf=REALDATA_DEEDHOLDER&qv='

并且名称被添加到末尾,如下所示:

“库珀·迈克尔·A 和黛布拉·K”

我的代码可以轻松地将空格替换为 '%20' 和 & 替换为 '%26'...等等。但是,当 THIS 是 deedholder 名称时,我该怎么办:

'SIEBELS LAWRENCE J (75%) & LOUISE F TRUST (25%)'

我无法成功地让这个查询工作。这是我的测试代码,其中仅包含相关功能:

import webbrowser, time

def FixURL(string):

##    string = string.replace('%','~')
    print string
    fix_dict = {' ':'%20','!':'%21','"':'%22','#':'%23','$':'%24',
                '&':'%26',"'":'%27','(':'%28',')':'%29',
                '*':'%2A','+':'%2b','.':'%2E','/':'%2F',':':'%3A',
                ';':'%3B','?':'%3F','@':'%40','{':'%7B','{':'%7D'}

    for k,v in fix_dict.iteritems():
        if k in string:
            string = string.replace(k,v)
##    return string.replace('~','%25')
    return string

if __name__ == '__main__':

    # testing
    easy = FixURL('COOPER MICHAEL A & DEBRA K')
    prefix = 'https://cedar.integritygis.com/default.aspx?ql=Parcel&qf=REALDATA_DEEDHOLDER&qv='
    url = '{}{}'.format(prefix,easy)
    print easy
    webbrowser.open(url)
    time.sleep(15)  # give it time to work

    hard = FixURL('SIEBELS LAWRENCE J (75%) & LOUISE F TRUST (25%)')
    print hard
    url = '{}{}'.format(prefix,hard)
    webbrowser.open(url)

我不知道如何“欺骗”它...您可以看到我不成功的尝试已被注释掉。有没有人有修复?我正在考虑做的一件事是从字典中删除空间并使用 '%20'.join(string.split()) 并测试列表中的每个项目以获取 url 的替换值......有什么想法吗?看来我又被 Python 挤压了。谢谢。

编辑:

从那以后,我已经完成了整个函数,现在只是 urllib.quote()。这是一个测试:

import webbrowser, urllib, time

prefix = 'https://cedar.integritygis.com/default.aspx?ql=Parcel&qf=REALDATA_DEEDHOLDER&qv='
easy = urllib.quote('COOPER MICHAEL A & DEBRA K')
url = '{}{}'.format(prefix,easy)
print easy
webbrowser.open(url)
time.sleep(15)  # give it time to work

hard = urllib.quote('SIEBELS LAWRENCE J (75%) & LOUISE F TRUST (25%)')
print hard
url = '{}{}'.format(prefix,hard)
webbrowser.open(url)

这应该缩放到提供的名称所拥有的地块...第一个有效,第二个无效,因为括号中的 % (我认为)。我得到 'ol query returned no results 错误。

【问题讨论】:

    标签: python html url python-2.7 url-encoding


    【解决方案1】:

    你可以使用python的标准urllib来做到这一点。

    http://docs.python.org/2/library/urllib.html#utility-functions

    查看实用程序函数。 urllib.quote 可能会完成这项工作。

    【讨论】:

    • 哇,我不知道为什么我一开始不打算使用它...我想我可以刮掉整个功能...但是,它不适用于问题之一:
    • 这不起作用:hard = urllib.quote('SIEBELS LAWRENCE J (75%) & LOUISE F TRUST (25%)')
    • 再次感谢...但没有运气。它基本上给了我与我的函数相同的结果......我现在已经用 urllib.quote() 替换了 FixURL() 并且仍然没有骰子。仍然无法对“%”符号进行编码。
    • 您确定您拥有正确的契约持有人姓名吗?您也可以尝试先转义 %(即将原始字符串中的 '75%' 替换为 '75\%')。
    • 如果您可以从网站手动查询,则应使用浏览器网络检查器准确检查成功请求使用的 URL。
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多