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
Finden und Kopieren
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Stichwort RegExp. (Modul re)
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@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?
Gibt's einen Grund, warum Du in eine Datei zwischenspeicherst, und nicht einfach nur die Daten in den Arbeitsspeicher liest?
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?
Gibt es für beautiful soup auch ne deutsche documentation?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Na wenn das keine Stilbluete istMathe hat geschrieben:deutsche documentation?
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
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
"<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?
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?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wie meinen? lxml ist ein Ersatz für BeautifulSoup und macht so ziemlich alles anders was man anders machen kanncofi hat geschrieben:Nein, so weit ich weiss wird es auch nicht weiter entwickelt (hat aber bei lxml Unterschlupf gefunden).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- 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?
Oder erinner ich mich da falsch?
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
"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".
"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".
Ok jetzt hab ich wieder ien bisschen dazugelernt, aber mein Problem ist immernoch nicht gelöst...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?
@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.
- 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)'
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Perfekt
Also ich hab das ganze jetzt so geschrieben:
So funktioniert das genauso, wie es soll. Zwar ist das script vielleicht nicht die schnellste Methode, aber ich komme ans Ziel
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()