Сокращение URL-адреса с помощью Python

Я работаю с огромным списком URL. Просто быстрый вопрос, который я пытаюсь отрезать часть URL-адреса, см. Ниже:

http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3 

Как я могу срезать:

 http://www.domainname.com/page?CONTENT_ITEM_ID=1234 

Иногда после идентификатора CONTENT_ITEM_ID появляется более двух параметров, и каждый раз каждый из них различается, я думаю, что это можно сделать, найдя первый &, а затем отрезая символы до этого &, не совсем уверен, как это сделать.

ура

  • Как передать несколько значений для одного параметра URL?
  • Итерация через url с помощью строк - python
  • urlib.py не работает с https?
  • Получить только первую ссылку списка URL-адресов с помощью BeautifulSoup
  • Как преобразовать целое число в кратчайшую безопасную строку в Python?
  • Как извлечь URL-адреса с HTML-страницы в Python
  • Django get url path без использования "request.path"
  • Как отправить запрос POST как JSON?
  • 10 Solutions collect form web for “Сокращение URL-адреса с помощью Python”

    Используйте модуль urlparse . Проверьте эту функцию:

     import urlparse def process_url(url, keep_params=('CONTENT_ITEM_ID=',)): parsed= urlparse.urlsplit(url) filtered_query= '&'.join( qry_item for qry_item in parsed.query.split('&') if qry_item.startswith(keep_params)) return urlparse.urlunsplit(parsed[:3] + (filtered_query,) + parsed[4:]) 

    В вашем примере:

     >>> process_url(a) 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234' 

    Эта функция имеет дополнительный бонус, который проще использовать, если вы решите, что хотите еще несколько параметров запроса, или если порядок параметров не фиксирован, как в:

     >>> url='http://www.domainname.com/page?other_value=xx&param3&CONTENT_ITEM_ID=1234&param1' >>> process_url(url, ('CONTENT_ITEM_ID', 'other_value')) 'http://www.domainname.com/page?other_value=xx&CONTENT_ITEM_ID=1234' 

    Быстрое и грязное решение таково:

     >>> "http://something.com/page?CONTENT_ITEM_ID=1234&param3".split("&")[0] 'http://something.com/page?CONTENT_ITEM_ID=1234' 

    Другим вариантом было бы использовать функцию split, используя & как параметр. Таким образом, вы извлечете как базовый url, так и оба параметра.

      url.split("&") 

    возвращает список с

      ['http://www.domainname.com/page?CONTENT_ITEM_ID=1234', 'param2', 'param3'] 

    Я понял, что это то, что мне нужно было сделать:

     url = "http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3" url = url[: url.find("&")] print url 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234' 

    URL-адрес Parsin никогда не бывает таким простым, как мне кажется, поэтому есть модули urlparse и urllib.

    EG:

     import urllib url ="http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3" query = urllib.splitquery(url) result = "?".join((query[0], query[1].split("&")[0])) print result 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234' 

    Это по-прежнему не на 100% надежнее, но гораздо больше, чем его расщепление, потому что существует много правильного формата url, который мы с вами не знаем и обнаруживаем в журналах ошибок один день.

     import re url = 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3' m = re.search('(.*?)&', url) print m.group(1) 

    Посмотрите на вопрос имени файла urllib2 для обсуждения этой темы.

    Также см. Вопрос « Python Find Question ».

    Этот метод не зависит от положения параметра в строке url. Я уверен, это может быть уточнено, но это имеет смысл.

     url = 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3' parts = url.split('?') id = dict(i.split('=') for i in parts[1].split('&'))['CONTENT_ITEM_ID'] new_url = parts[0] + '?CONTENT_ITEM_ID=' + id 

    Древний вопрос, но все же, я хотел бы отметить, что строки строки запроса также могут быть разделены символом ';' не только '&'.

    рядом с urlparse есть также furl , у которого есть ИМХО лучший API.

    Interesting Posts

    Почему json.dumps сбрасывает символы не-ascii с помощью "\ uxxxx"

    ImportError: нет модуля с именем cv2.cv

    Python matplotlib: изменить метки осей / легенда от жирного до обычного веса

    Печать Python не использует __repr__, __unicode__ или __str__ для юникодного подкласса?

    Мне нужен образец модуля тестирования python sqlalchemy с носом

    F2Py: Работа с выделенными массивами в Fortran вызывается через Python

    Четко передайте позиционные аргументы как аргументы и необязательные аргументы как kwargs от argpase к функции

    Почему я не могу импортировать из псевдонима модуля?

    Как я могу читать структуры данных Perl из Python?

    Reportlab – как ввести разрыв строки, если абзац слишком длинный для строки

    Проблемы с операциями numpy meshgrid

    Python argparse required = True, но – функции преобразования?

    Планирование кадров данных Pandas

    Как изящно прервать загрузку urllib2?

    Что может привести к тому, что диалоговое окно открытого файла в Tkinter / Python будет очень медленно закрываться после того, как пользователь выберет файл?

    Python - лучший язык программирования в мире.