Finden und Kopieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

Hiho,

Also zur Zeit habe ich folgendes Problem.

Ich lade mir eine Webseite mit urlretrieve () runter und speichere sie in einem html Dokument ab. Dieses möchte ich dann gerne durchsuchen.

Was ich suchen möchte:

Ich habe es mir so gedacht, dass ich erst etwas suche, was vor den Informationen steht die ich suche und dann etwas was nach den Informationen steht die ich suche. Alles dazwischen möchte ich dann "kopieren" (in Variablen speichern).

Nur leider hab ich überhaupt kein plan, wie ich das mit dem Suchen und Kopieren realisieren soll.

MfG
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Stichwort RegExp. (Modul re)
BlackJack

@Mathe: Oder Du nimmst gleich einen richtigen HTML-Parser, wie zum `BeautifulSoup`.

Gibt's einen Grund, warum Du in eine Datei zwischenspeicherst, und nicht einfach nur die Daten in den Arbeitsspeicher liest?
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

Tja das mit dem zwischenspeichern wollte ich machen, weil ich die auf die Datei noch mit anderen programmen zugreifen wollte. Aber das hat sich jetzt erstmal erledigt.

Gibt es für beautiful soup auch ne deutsche documentation?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Mathe hat geschrieben:deutsche documentation?
Na wenn das keine Stilbluete ist :twisted:

Nein, so weit ich weiss wird es auch nicht weiter entwickelt (hat aber bei lxml Unterschlupf gefunden).
Im Uebrigen ist deutsche Dokumentation schwer zu finden und meist nicht aktuell.
http://www.python-forum.de/topic-17375.html
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

"<span id="ctl00_ContentBody_LogHeading">Tracking History (33.8mi) <a href="./map_gm.aspx?ID=2342529">View Map</a></span></h3>"

Das ist meine Zeile die ich aus dem Quellcode finden möchte. Daraus möchte ich dann gerne "Tracking History (33.8mi)" (Dieser Wert variert von mal zu mal) lesen und in eine Variable schreiben. Nur irgendwie schaff ich es nicht mit beautiful soup den zu finden...Kann mir da wer helfen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cofi hat geschrieben:Nein, so weit ich weiss wird es auch nicht weiter entwickelt (hat aber bei lxml Unterschlupf gefunden).
Wie meinen? lxml ist ein Ersatz für BeautifulSoup und macht so ziemlich alles anders was man anders machen kann ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich dachte der Entwickler haette keine Lust mehr gehabt und lxml hat sich dessen angenommen: http://codespeak.net/lxml/elementsoup.html

Oder erinner ich mich da falsch?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das bindet doch nur BeautifulSoup an. BeautifulSoup bleibt dabei trotzdem ein separates Modul und Projekt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

"lxml.html.soupparser" und "lxml.html.elementsoup" sind kein Ersatz für BeautifulSoup. Im Gegenteil, sie setzen BeautifulSoup sogar voraus. "lxml.html.soupparser" nutzt BeautifulSoup, um HTML in "lxml.html"-Datenstrukturen zu übersetzen (genau wie "lxml.html.html5parser" html5lib benutzt). Somit kann man den Parser auswechseln, ohne eine andere API benutzen zu müssen.

"lxml.html.elementsoup" dagegen ist die lxml-Implementierung von ElementSoup. Das hat sich aber wohl nie wirklich durchgesetzt, die Dokumentation bezeichnet "lxml.html.elementsoup" daher auch "legacy".
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

Mathe hat geschrieben:"<span id="ctl00_ContentBody_LogHeading">Tracking History (33.8mi) <a href="./map_gm.aspx?ID=2342529">View Map</a></span></h3>"

Das ist meine Zeile die ich aus dem Quellcode finden möchte. Daraus möchte ich dann gerne "Tracking History (33.8mi)" (Dieser Wert variert von mal zu mal) lesen und in eine Variable schreiben. Nur irgendwie schaff ich es nicht mit beautiful soup den zu finden...Kann mir da wer helfen?
Ok jetzt hab ich wieder ien bisschen dazugelernt, aber mein Problem ist immernoch nicht gelöst...
BlackJack

@Mathe: Wenn das `id`-Attribut eindeutig ist, wäre das doch schon mal ein schöner Ansatzpunkt, um die Stelle zu finden. Damit kommst Du an das `span`-Element und von da recht einfach an den Text.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Mal eine recht fragile Version mit RegExp (fuer etwas stabileres braucht man mehr Infos)

Code: Alles auswählen

In [17]: import re

In [18]: text = """<span id="ctl00_ContentBody_LogHeading">Tracking History (33.8mi) <a href="./map_gm.aspx?ID=2342529">View Map</a></span></h3>"""

In [19]: a = re.search(r"Tracking History \(.*?\)", text)

In [20]: a.group()
Out[20]: 'Tracking History (33.8mi)'
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

Perfekt :D

Also ich hab das ganze jetzt so geschrieben:

Code: Alles auswählen

from urllib import *
import re

url = "x"
datei = urlretrieve (url, "y") 

text = open ("y", "r").read()

a = re.search("Tracking History \(.*?\)", text)
print a.group()
So funktioniert das genauso, wie es soll. Zwar ist das script vielleicht nicht die schnellste Methode, aber ich komme ans Ziel :D
Antworten