Разделение строк URL-адреса, которое всегда изменяет положение его значений в python

#python #pandas #dataframe #numpy #code-splitting

Вопрос:

Мне нужно разделить URL-адрес, который очень часто меняет позиции своих значений.

например:- Это URL-адрес с тремя различными позициями маркера запроса

 01:-https://127.0.0.1/?action=loginamp;type=loginamp;status=successamp;request_token=oCS44HJQT2ZSCGb39H76CjgXb0s2klwA

02:-https://127.0.0.1/?request_token=43CbEWSxdqztXNRpb2zmypCr081eF92damp;action=loginamp;type=loginamp;status=success

03:-https://127.0.0.1/?amp;action=loginamp;request_token=43CbEWSxdqztXNRpb2zmypCr081eF92damp;type=loginamp;status=success
 

Из URL-адреса thses мне нужно только значение токена запроса, которое следует после » = «с буквенно-цифровым номером, подобным этому «43CbEWSxdqztXNRpb2zmypCr081eF92d».

И чтобы разделить этот URL-адрес, я использую этот код

 request_token = driver.current_url.split('=')[1].split('amp;action')[0]
 

Но это дает мне ошибку, когда URL-адрес не находится в указанной позиции.

Итак, может ли кто-нибудь, пожалуйста, дать мне решение для разделения этого URL-адреса всего в одной строке на python, и это было бы большим благословением для меня со стороны моих коллег-участников стека.

Примечание:- Здесь я использую driver.current_url , потому что я работаю в selenium, чтобы сделать это.

Комментарии:

1. как это возможно request_token=43CbEWSxdqztXNRpb2zmypCr081eF92dtype=loginamp;status=success , в запросе , если есть несколько аргументов, то все они разделены amp; , как для этого токена и типа??

2. Эй, @JohnByro, извини, это была ошибка моего типа. можешь ли ты дать мне какое-нибудь сольн этому брату, пожалуйста 🙂

Ответ №1:

Вы можете использовать urllib.parse модуль для правильного анализа URL-адресов.

 >>> from urllib.parse import urlparse, parse_qs
>>> url = "?request_token=43CbEWSxdqztXNRpb2zmypCr081eF92damp;action=loginamp;type=loginamp;status=success"
>>> query = parse_qs(urlparse(url).query)
>>> query['request_token']
['43CbEWSxdqztXNRpb2zmypCr081eF92d']
>>> query['request_token'][0]
'43CbEWSxdqztXNRpb2zmypCr081eF92d'
 

Это обрабатывает фактическую структуру URL-адресов и не зависит от положения параметра или других особых случаев, которые вам придется обрабатывать в регулярном выражении.

Ответ №2:

Предполагая, что у вас есть URL-адреса в виде строк, вы можете использовать регулярное выражение для изоляции токенов запроса.

 import re
urls = ['https://127.0.0.1/?action=loginamp;type=loginamp;status=successamp;request_token=oCS44HJQT2ZSCGb39H76CjgXb0s2klwA',
        'https://127.0.0.1/?request_token=43CbEWSxdqztXNRpb2zmypCr081eF92damp;action=loginamp;type=loginamp;status=success',
        'https://127.0.0.1/?amp;action=loginamp;request_token=43CbEWSxdqztXNRpb2zmypCr081eF92damp;type=loginamp;status=success']
for url in urls:
    m = re.match('.*request_token=(.*?)(?:amp;|$)', url)
    if m:
        print(m.group(1))