Как исправить сложную кодировку HTML для URL-адреса в скрипте python?

103
13

У меня есть кошмарная ситуация на моих руках (или, может быть, это легко, я не знаю)... Поэтому у меня есть небольшая функция, которая работает в довольно большом скрипте python... У меня все получилось в более крупном скрипте, и в конце сценарий будет называть наши услуги веб-карты и показывать посылки в вопросе... У нас есть 20K посылок, и ТОЛЬКО 10 из них имеют "%" в имени участника. Таким образом, это работает более 99% времени, но всегда есть 1% (или меньше в этом случае)

Проблема в том, что в редкой ситуации, когда есть знак процента в имени владельца счета, когда я предоставляю 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()) и тестировать каждый элемент в списке для значений замещения для 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", не возвратил никакой ошибки результатов.

спросил(а) 2013-08-14T21:35:00+04:00 6 лет, 10 месяцев назад
1
Решение
67

Для этого вы можете использовать python standard urllib.

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

Посмотрите на функции утилиты. urllib.quote, вероятно, выполнит эту работу.

ответил(а) 2013-08-14T21:39:00+04:00 6 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема