Нарезка URL с помощью Python - PullRequest
8 голосов
/ 03 ноября 2008

Я работаю с огромным списком 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 имеется более двух параметров, и идентификатор каждый раз отличается, я думаю, что это можно сделать, найдя первое &, а затем отрезав символы перед этим &, не совсем уверенный, как это сделать Тхо.

Приветствия

Ответы [ 10 ]

14 голосов
/ 03 ноября 2008

Используйте модуль 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'
4 голосов
/ 03 ноября 2008
3 голосов
/ 03 ноября 2008

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

   url.split("&") 

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

  ['http://www.domainname.com/page?CONTENT_ITEM_ID=1234', 'param2', 'param3']
1 голос
/ 03 ноября 2008

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

E.G:

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, которые вы и я не знаем и однажды обнаруживаем в журналах ошибок.

1 голос
/ 03 ноября 2008

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

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'
0 голосов
/ 20 июля 2012

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

0 голосов
/ 24 февраля 2010

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

0 голосов
/ 03 ноября 2008

Этот метод не зависит от положения параметра в строке 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
0 голосов
/ 03 ноября 2008

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

См. Также вопрос " Python Find Question ".

0 голосов
/ 03 ноября 2008
import re
url = 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3'
m = re.search('(.*?)&', url)
print m.group(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...