mimi c кодировка веб-URL для китайских символов в python - PullRequest
1 голос
/ 13 июля 2020

Я хочу использовать mimi c Кодировку URL для китайских символов. В моем случае у меня есть URL-адрес для поиска на сайте электронной коммерции

'https://search.jd.com/Search?keyword={}'.format('ipad')

. Когда я ищу продукт на английском языке sh, это работает нормально. Однако мне нужно вводить данные на китайском языке, я попробовал

'https://search.jd.com/Search?keyword={}'.format('耐克t恤')

и нашел следующую кодировку на вкладке сети

https://list.tmall.com/search_product.htm?q=%C4%CD%BF%CBt%D0%F4

Итак, в основном, мне нужно кодировать такие входы, как ' 耐克 t 恤 'в'% C4% CD% BF% CBt% D0% F4 '. Я не уверен, какую кодировку использует сайт? Кроме того, как преобразовать китайские символы в эти кодировки с помощью python?

Обновление: я проверил заголовки, и похоже, что кодировка содержимого - gzip?

Ответы [ 2 ]

5 голосов
/ 13 июля 2020

Попробуйте использовать библиотечный модуль urllib.parse. В частности, функция urllib.parse.urlencode(). Вы можете передать кодировку (в данном случае это «gb2312») и dict, содержащий параметры запроса, чтобы получить действительный действительный суффикс URL-адреса, который вы можете использовать напрямую.

В этом случае ваш код будет выглядит примерно так:

import urllib.parse

keyword = '耐克t恤'
url = 'https://search.jd.com/Search?{url_suffix}'.format(url_suffix=urllib.parse.urlencode({'keyword': keyword}, encoding='gb2312'))

Подробнее о кодировке здесь Подробнее о urlencode здесь

2 голосов
/ 13 июля 2020

Используемая кодировка выглядит GB2312

Это может вам помочь:

def encodeGB2312(data):
    hexData = data.encode(encoding='GB2312').hex().upper()    
    encoded = '%' + '%'.join(hexData[i:i + 2] for i in range(0, len(hexData), 2)) 
    return encoded    

output = encodeGB2312('耐克t恤')

print(output)
url = f'https://list.tmall.com/search_product.htm?q={output}'
print(url)

Вывод:

%C4%CD%BF%CB%74%D0%F4
https://list.tmall.com/search_product.htm?q=%C4%CD%BF%CB%74%D0%F4

Единственная проблема с моим кодом заключается в том, что он, похоже, не на 100% соответствует ссылке, которую вы пытаетесь достичь. Он преобразует символ t в кодировку GB2312. Хотя, похоже, в вашей ссылке используется некодированный символ t. Хотя при открытии URL-адреса кажется, что он все еще работает.

Изменить:

Vigne sh Bayari R, его сообщение обрабатывает URL-адрес правильным (предполагаемым) способом. Но и в этом случае мое решение тоже работает.

...