2016-03-22 11 views
-2

Ich verwende wget, um eine HTML-Seite herunterzuladen und Informationen aus zu extrahieren. Speziell möchte ich dies drehen:Extrahieren Sie Informationen aus HTML-Dokumenten mit der Befehlszeile

<a href="/312728/" title="The 10 Best Goals ever"> 
<a href="/671921/" title="Golf at its best"> 
<a href="/371285/" title="Football Legends"> 
<a href="/576903/" title="Boxing Legends"> 

in diese und speichern Sie als eine TXT-Datei.

/312728/The 10 Best Goals ever 
/671921/Golf at its best 
/371285/Football Legends 
/576903/Boxing Legends 

Ich habe versucht:

wget --quiet -O - http://some-site.com | grep -o '<a href="/?/" title="?"> > new.txt 

aber das hat mir nicht die gewünschten Ergebnisse.

+0

'grep' oder einen regulären Ausdruck in der Regel nicht das richtige Werkzeug, um Informationen von Markup-Sprachen zu extrahieren . Es gibt Unmengen von Beispielen, wie man es im Internet richtig macht. Sie finden jedoch auch Tonnen von falschen Beispielen mit regulären Ausdrücken. Ich habe deine Frage ein wenig umformuliert. Ich hoffe, dass Sie sich ein wenig für andere Lösungen als "Grep" öffnen. – hek2mgl

Antwort

1

Ändern der grep zu egrep für einige feinere regex Fähigkeiten, können Sie wie etwas tun:

wget --quiet -O - http://some-site.com | egrep -e '<a href="\/[0-9]*\/" title="[:alnum:]*' 

Welche zurückkehren sollte:

<a href="/312728/" title="The 10 Best Goals ever"> 
<a href="/671921/" title="Golf at its best"> 
<a href="/371285/" title="Football Legends"> 
<a href="/576903/" title="Boxing Legends"> 

Dann awk verwenden, können wir das Zeug durch Doppel abgrenzen -Quote und wählen Sie die Teile, die Sie zurückgeben möchten:

wget --quiet -O - http://some-site.com | egrep -e '<a href="\/[0-9]*\/" title="[:alnum:]*' | awk -F'"' '{print $2$4}' 

Was sollte dies zurück:

/312728/The 10 Best Goals ever 
/671921/Golf at its best 
/371285/Football Legends 
/576903/Boxing Legends 

Die Sie in eine Textdatei wie diese umleiten könnte:

wget --quiet -O - http://some-site.com | egrep -e '<a href="\/[0-9]*\/" title="[:alnum:]*' | awk -F'"' '{print $2$4}' >> mytextfile.txt 
+0

nein, was ich schrieb mit wget tut nichts, es gibt nichts zurück, deshalb ich brauche Hilfe, um es zu schreiben und es gibt viele von ihnen nicht nur 4 – bob

+0

kann jemand bitte helfen – bob

+0

Es ist schwer zu sagen, da ich keine Ahnung habe, wie Ihr HTML aussieht . Vielleicht für deinen grep: 'egrep -e ' JNevill

Verwandte Themen