Nein, da zumindest momentan Aptitude besser ist - es speichert mehr Metadaten, unter anderem auch die automatisch installierten Pakete um die Dependencies zu erfüllen und kann diese dann auch deinstallieren, wenn sie nicht mehr gebraucht werden. apt-get habe ich seit Debian 3.0 "Woody" (ca. 2003) nicht mehr benutzt.The Hit-Man hat geschrieben:heißt das nicht apt-get install subversion ?
parsen oder filtern
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Müsste das apt-get nicht auch machen? Zumindest gibt es ein ``apt-get autoremove``, und die man-Page spuckt dazu ``autoremove is used to remove packages that were automatically installed to satisfy dependencies for some package and that are no more needed.`` aus.Leonidas hat geschrieben:Nein, da zumindest momentan Aptitude besser ist - es speichert mehr Metadaten, unter anderem auch die automatisch installierten Pakete um die Dependencies zu erfüllen und kann diese dann auch deinstallieren, wenn sie nicht mehr gebraucht werden.The Hit-Man hat geschrieben:heißt das nicht apt-get install subversion ?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Habe nachgeschaut, ab Ubuntu 6.10 scheint apt-get das auch zu können. Aptitude hat aber noch zusätzlich den Vorteil der IMHO recht gelungenen ncurses-GUI. Siehe auch AptitudevsAptGet.Trundle hat geschrieben:Müsste das apt-get nicht auch machen?Leonidas hat geschrieben:Nein, da zumindest momentan Aptitude besser ist - es speichert mehr Metadaten, unter anderem auch die automatisch installierten Pakete um die Dependencies zu erfüllen und kann diese dann auch deinstallieren, wenn sie nicht mehr gebraucht werden.The Hit-Man hat geschrieben:heißt das nicht apt-get install subversion ?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
jo, apt-get kümmert sich auch abhängigkeiten. ganz früher hatte ich dselect benutzt ( weiß gar nicht, ob das noch dabei ist ), gibt ja auch noch synaptic, was eigentlich auch ganz gut gemacht ist, wenn man die komandozeile nicht mag ( ich mag sie jedoch ). das apt-get, gibts ja mitlerweile für fast alles distris, auch für die, die eigentlich rpm ( sprich suse, mandriva usw. ) oder tgz ( sprich slackware, zenwalk usw. ) benutzen.
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
hmmmm, funtzt immer noch nicht habe alles installiert und deinen code genommen:
python-lxml ist bei mir, mit version 1.3.6-1 installiert. also brauche ich diese version python-lxml 2.0.3, denke ich?
bekomme jetzt das ausgespuckt:
Code: Alles auswählen
import html5lib
from html5lib import treebuilders
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder('lxml'))
f = open('olg.html')
doc = parser.parse(f)
f.close()
image = doc.findall("//*img[@src='http://image.onlineglueck.de/neu/main/mini_shortmessage.gif']")[0]
parent = image.getparent()
number = parent.getnext()
print number.text
bekomme jetzt das ausgespuckt:
Code: Alles auswählen
hitman@nexus-ii:~/python/WebOLG$ python test.py
/usr/lib/python2.5/site-packages/html5lib/treebuilders/etree_lxml.py:29: DataLossWarning: lxml does not preserve doctype case
warnings.warn("lxml does not preserve doctype case", DataLossWarning)
Traceback (most recent call last):
File "test.py", line 7, in <module>
image = doc.findall("//*img[@src='http://image.onlineglueck.de/neu/main/mini_shortmessage.gif']")[0]
File "etree.pyx", line 1378, in etree._ElementTree.findall
File "etree.pyx", line 1085, in etree._Element.findall
File "/usr/lib/python2.5/site-packages/lxml/_elementpath.py", line 193, in findall
return _compile(path).findall(element)
File "/usr/lib/python2.5/site-packages/lxml/_elementpath.py", line 171, in _compile
p = Path(path)
File "/usr/lib/python2.5/site-packages/lxml/_elementpath.py", line 88, in __init__
"expected path separator (%s)" % (op or tag)
SyntaxError: expected path separator (img)
hitman@nexus-ii:~/python/WebOLG$
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, du brauchst lxml 2. Ansonsten kannst du den Baum auch anders durchlaufen, mit simplerem XPath oder per Hand. Ich find jedoch die Query-Sprachen schneller.
Überigens man kann auch statt dem XPath:
auch CSS Selectors nutzen:
Da kommt dann gleich jQuery-Feeling auf
Überigens man kann auch statt dem XPath:
Code: Alles auswählen
image = doc.findall("//*img[@src='http://image.onlineglueck.de/neu/main/mini_shortmessage.gif']")[0]
Code: Alles auswählen
from lxml.cssselect import CSSSelector
image = CSSSelector("img[src$='mini_shortmessage.gif']")(doc)[0]
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
hat alles dann doch so weit geklappt hatte mir noch easy_install installiert, und für das lxml , mußte dann noch das .egg gebaut werden. hatte ich dann auch hin bekommen. mensch das das alles so ne arbeit ist, hätte ich dann doch nicht gedacht jetzt ist so weit alles fertig und bekomme probleme mit wxglade *argh*
das formular ist fertig ( erstellt mit wxglade ), doch bei dem tool, haste ja kein wxtimer, den es unter boa-constructor dabei wäre ( unter boa-constructor ist der form designer müll ). ich brauche ja den timer, um die seite interval-mäßig abzufragen. man man man. warum gibts nicht eine vernünftige IDE, wo so nen richtiger fenster designer dabei ist? ich würde da echt auch nen paar euros springen lassen.
jetzt stehe ich da und habe keinen vernünftigen fenster designer, womit ich um das tool, nen fenster basteln kann obwohl ich auf wxwidgets im anderen thread die hand drauf gelegt habe *grummel*
@Leonidas
wie machst du deine fenster und in welcher IDE programmierst du? sag jetzt bitte nicht, du codest im emacs, oder der gleichen
Edit (Leonidas): Restliche Diskussion in "GUI Builder" abgetrennt.
das formular ist fertig ( erstellt mit wxglade ), doch bei dem tool, haste ja kein wxtimer, den es unter boa-constructor dabei wäre ( unter boa-constructor ist der form designer müll ). ich brauche ja den timer, um die seite interval-mäßig abzufragen. man man man. warum gibts nicht eine vernünftige IDE, wo so nen richtiger fenster designer dabei ist? ich würde da echt auch nen paar euros springen lassen.
jetzt stehe ich da und habe keinen vernünftigen fenster designer, womit ich um das tool, nen fenster basteln kann obwohl ich auf wxwidgets im anderen thread die hand drauf gelegt habe *grummel*
@Leonidas
wie machst du deine fenster und in welcher IDE programmierst du? sag jetzt bitte nicht, du codest im emacs, oder der gleichen
Edit (Leonidas): Restliche Diskussion in "GUI Builder" abgetrennt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hier noch eine Alternativversion mit cElementTree.
Ist aber wegen dem festverdrahtetem 21 nicht sonderlich schön, bricht also wenn die weitere ``<tr>``s einfügen. Da müsste man anders rangehen, d.h. also die ``<tr>`` durchgehen und gucken ob in ihren Childnodes das Bild vorhanden ist.
Code: Alles auswählen
import html5lib
from html5lib import treebuilders
from xml.etree import cElementTree
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder('etree', cElementTree))
f = open('olg.html')
doc = parser.parse(f)
f.close()
containing = doc.findall(".//tr")[21]
number = containing.getchildren()[1]
print number.text
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
das letzte beispiel sieht auch gut aus ! ich glaube mir wäre das lieber, weil nicht alles, was ich abfragen möchte, ein minibildchen besitzt, da ist es vielleicht besser, den sowieso vielten tag abzufragen. werde mir beide codesnipes aufschreiben
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du musst dich ja auch nicht am Bildchen aufhängen, kannst auch andere Elemente nehmen. Ich habe das Bildchen gewählt, weil es recht leicht mit XPath/CSS Selektoren zu finden ist, aber du könntest auch an die Ziffer auf tausend anderen Wegen kommen. Der Weg mit dem Zählen der <td> ist aber recht unpraktisch, weil er vermutlich schon bei kleineren Änderungen an der Seite nicht funktioniert.The Hit-Man hat geschrieben:nicht alles, was ich abfragen möchte, ein minibildchen besitzt, da ist es vielleicht besser, den sowieso vielten tag abzufragen
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
die könnten auch eben nen anderen namen, für das bildchen nehmen, würde mein messenger auch nicht mehr gehen. leider muß man damit rechnen allerdings habe ich bis jetzt noch nicht gesehen, das die an dem source was geändert hätten. ich denke auch mal, werden sie auch erst mal nicht machen, weil lohnt auch nicht weiter. der chat rennt ja.Der Weg mit dem Zählen der <td> ist aber recht unpraktisch, weil er vermutlich schon bei kleineren Änderungen an der Seite nicht funktioniert.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Natürlich. Beim scrapen geht es eben um Warscheinlichkeiten. Es ist wohl warscheinlicher, dass sie ein weiteres <td> einfügen (etwa um eine Box mit Breaking News einzufügen, irgendwie so etwas) als dass sie das Bild umbenennen. Kann natürlich beides vorkommen - scraping funktioniert eben nur so lange gut, bis die Seite die gescraped wird geändert wird.The Hit-Man hat geschrieben:die könnten auch eben nen anderen namen, für das bildchen nehmen, würde mein messenger auch nicht mehr gehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
@Leondias
wäre es auch möglich, das ich beautifulsoup für das suchen nehmen könnte? und wenn, wird es genau so einfach benutzt wie die html5lib. hatte mir die doku zu beautifulsoup mal angeschaut, allerdings fand ich kein gutes beispiel, wie hier, mit der html5lib.
EDIT:
habs so erst mal versucht. nur jetzt bekomme ich ja alle tags angezeigt, ich möchte aber nur einen bestimmten, am besten das ich ihm sagen könnte, den 21zigste.
wäre es auch möglich, das ich beautifulsoup für das suchen nehmen könnte? und wenn, wird es genau so einfach benutzt wie die html5lib. hatte mir die doku zu beautifulsoup mal angeschaut, allerdings fand ich kein gutes beispiel, wie hier, mit der html5lib.
EDIT:
Code: Alles auswählen
soup = BeautifulSoup(page)
print soup.html.findAll('td')
Na das wäre dann
Ist aber wahrscheinlich nicht so besonders robust. Ich würde versuchen das etwas genauer zu beschreiben. Also zum Beispiel erst einmal die Tabelle identifizieren und dabei auch Gebrauch von eventuellen IDs machen.
Code: Alles auswählen
print soup.html.findAll('td')[20]
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
habs jetzt so hinbekommen, das mir auch der wert gleich ausgelesen wird
Code: Alles auswählen
soup = BeautifulSoup(page)
extract1 = soup.html.findAll('td')
print extract1[31].contents[0]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, kannst du aber für mich verhält sich das zu "seltsam", dss dann Sachen manchmal schlichtweg nicht funktionieren und es dann seltsame Hacks braucht. Außerdem ist eben das Ablaufen der Indizes nicht wirklich robust, da nehme ich mir lieber einen Selektor oder ein XPath-Query gegen ein Objekt von dem ich meine dass es eher beständig ist.The Hit-Man hat geschrieben:wäre es auch möglich, das ich beautifulsoup für das suchen nehmen könnte?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
@Leondias
so bekomme ich das 30zigste Element angezeigt, aber wie kann ich feststellen, wieviele Elemente jetzt vorhanden sind, im extract1 ??? Muß das wissen, da ich ein Listfeld füllen möchte.
Code: Alles auswählen
soup = BeautifulSoup(page)
extract1 = soup.html.findAll('td')
print extract1[31].contents[0]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Code: Alles auswählen
print len(extract1)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 435
- Registriert: Montag 20. Februar 2006, 18:11
- Wohnort: Menden / Sauerland
- Kontaktdaten:
argh, und ich google mich dumm und dämlich. Also in der Doku habe ich nichts darüber gefunden.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Tutorial: Lists. Die meisten Dinge auf die du per Index zugreifen kannst, können dir auch ihre Länge sagen, indem du mit ``len()`` auf ihr ``__len__`` zugreifst.The Hit-Man hat geschrieben:Also in der Doku habe ich nichts darüber gefunden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice