如何修复python脚本中URL的复杂HTML编码?

如何修复python脚本中URL的复杂HTML编码?,python,html,url,python-2.7,url-encoding,Python,Html,Url,Python 2.7,Url Encoding,我手头有一个噩梦般的情况(或者可能很简单,我不知道)…所以我有一个小函数,在一个相当大的python脚本中运行…我已经在较大的脚本中解决了所有问题,最后脚本将调用我们的web地图服务并显示有问题的地块…我们有20K个地块,其中只有10个在Deedholder名称中有“%”。所以这在99%的时间内都有效,但总有1%(在这种情况下是更少的) 问题是,在deedholder名称中有百分号的罕见情况下,当我提供url时,它无法找到查询。因此,我测试了大量的名称,只有当名称中有百分号时,它才会起作用 因此

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

问题是,在deedholder名称中有百分号的罕见情况下,当我提供url时,它无法找到查询。因此,我测试了大量的名称,只有当名称中有百分号时,它才会起作用

因此前缀将如下所示:

''

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

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

我的代码可以轻松地将空格替换为“%20”,将&替换为“%26”…等等。但如果这是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查询没有返回结果”错误。

您可以使用python的标准
urllib
来执行此操作


看看实用程序函数
urllib.quote
可能会起作用。

哇,我不知道为什么我一开始就不想使用它……我想我可以从头开始使用整个函数……但是,它没有解决问题一:这不起作用:hard=urllib.quote('SIEBELS LAWRENCE J(75%)和LOUISE F TRUST(25%))再次感谢……但运气不好。它基本上给出了与函数相同的结果…我现在用urllib.quote()替换了FixURL(),但仍然没有骰子。对“%”符号进行编码时仍有问题。是否确实知道您的deedholder名称正确?您也可以尝试首先转义%(即,将原始字符串中的“75%”替换为“75\%”)。如果您可以手动从网站进行查询,则应使用浏览器网络检查器检查成功请求使用的URL。