#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))