8 Stimmen

URL-Slicing mit Python

Ich arbeite mit einer großen Liste von URLs. Nur eine kurze Frage habe ich versuchen, einen Teil der URL herauszuschneiden, siehe unten:

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

Wie könnte ich mir eine Scheibe abschneiden:

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

Manchmal gibt es mehr als zwei Parameter nach der CONTENT_ITEM_ID und die ID ist jedes Mal anders, ich denke, es kann getan werden, indem Sie die erste & und dann schneiden Sie die Zeichen vor, dass &, nicht ganz sicher, wie dies zu tun tho.

Prost

14voto

tzot Punkte 86792

Verwenden Sie die urlparse Modul. Überprüfen Sie diese Funktion:

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:])

In Ihrem Beispiel:

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

Diese Funktion hat den zusätzlichen Vorteil, dass sie einfacher zu verwenden ist, wenn Sie beschließen, dass Sie noch weitere Abfrageparameter benötigen, oder wenn die Reihenfolge der Parameter nicht festgelegt ist, wie z. B. in:

>>> 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'

4voto

Rafał Dowgird Punkte 40450

Die schnelle und schmutzige Lösung ist diese:

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

3voto

Kena Punkte 6891

Eine andere Möglichkeit wäre die Verwendung der Split-Funktion, mit & als Parameter. Auf diese Weise würden Sie sowohl die Basis-URL als auch beide Parameter extrahieren.

   url.split("&") 

gibt eine Liste mit

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

1voto

RailsSon Punkte 18617

Ich habe unten herausgefunden, was ich tun muss:

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 Stimmen

Vorsicht: Wenn keine Parameter (kein "&") vorhanden sind, wird nur das letzte Zeichen der URL gelöscht.

0 Stimmen

0 Stimmen

Ah, ich verstehe, wie das ein Problem sein könnte, und danke für die Warnung. Die Liste, die ich verwende, hat immer einen Parameter nach der Liste, aber ich werde das für die Zukunft im Hinterkopf behalten :)

1voto

e-satis Punkte 547539

Das Parsen von URLs ist nie so einfach wie es scheint, deshalb gibt es die Module urlparse und 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'

Das ist zwar immer noch nicht 100 % zuverlässig, aber immer noch besser, als es selbst aufzuspalten, denn es gibt eine Menge gültiger URL-Formate, die wir beide nicht kennen und eines Tages in den Fehlerprotokollen entdecken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X