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

时间:2013-08-14 18:35:32

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

我的手上有一个噩梦(或者很容易,我不知道)...所以我有一个小功能,运行在一个相当大的python脚本...我已经解决了所有问题较大的脚本,最后脚本将调用我们的Web地图服务并显示有问题的包裹...我们有20K包裹,其中只有10个在Deedholder名称中有'%'。因此,这种方法在99%的时间内都有效,但总有1%(或者说在这种情况下更少)

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

所以前缀将如下所示:

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

并将名称添加到结尾,如下所示:

'COOPER MICHAEL A& DEBRA K'

我的代码可以轻松地用'%20'和&替换空格'%26'等等。但是当这是契约人名称时我该怎么办:

'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())并测试列表中的每个项目以获取网址的替换值...有什么想法吗?似乎我再次受到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查询返回没有结果错误。

1 个答案:

答案 0 :(得分:2)

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

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

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