Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
sed: link aus html file extrahieren
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Wed Sep 07, 2011 3:16 pm    Post subject: sed: link aus html file extrahieren Reply with quote

Hallo,

ich weiß das ist ein Gentoo Forum, aber ich hab schon mal ein Thema gesehen, in dem über sed diskutiert wurde.

Ich habe folgendes Problem.

Ich hol mir mit curl eine Seite, und will alle Links (a href) in einer Datei stehen haben.

Ich hab mal mit "grep 'a href'" nur die relevanten Zeilen herausgenommen.

Ich kenn mich aber mit sed nicht genug aus. Was muss man sed als Parameter anhängen, dass er alles von "<a href" bis ">" (also der a-tag zu) ausgibt?

LG Roland
_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Wed Sep 07, 2011 3:45 pm    Post subject: Reply with quote

Hallo, schau dir doch mal das hier an: http://www.thomashertweck.de/sedawk.html
wenn du danach noch fragen hast, nur zu!

Schöne Grüße
Christian
Back to top
View user's profile Send private message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Wed Sep 07, 2011 5:37 pm    Post subject: Reply with quote

Danke für den Link. Das ist ein super Tutorial, ich hab schon ein paar gelesen, die waren aber nie so informativ.

Verstanden hab ich glaub ich jetzt mehr, aber ich weiß immer noch nicht genau wie ich das ausfiltre.

Mit grep 'a href' bekomm ich ja die Zeilen, aber wie man nur den http-link rauskommt da scheitere ich.
_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
Finswimmer
Moderator
Moderator


Joined: 02 Sep 2004
Posts: 5467
Location: Langen (Hessen), Germany

PostPosted: Wed Sep 07, 2011 5:56 pm    Post subject: Reply with quote

echo "eiaeae<a href="http://www.test.de">test.de</a>aieiaeaiea" | gawk -F= '{ print $2 }'| gawk -F\> '{ print $1 }'
_________________
Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke
Back to top
View user's profile Send private message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Wed Sep 07, 2011 7:19 pm    Post subject: Reply with quote

Danke für das Beispiel. Das geht ja sogar ohne sed.

Ich hab am mac kein gawk sondern nur awk (das ist aber das selbe oder? das g steht ja nur für GNU).

Bei deinem Beispiel funktioniert das auch wunderbar.

aber wenn ich ein curl davor in die pipe hänge kommt viel aber kein einziger link den ich suche.


Edit:

wenn ich das richtig lese zeigt er mir den Inhalt der tags davor.
_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
yuhu
Tux's lil' helper
Tux's lil' helper


Joined: 17 Oct 2006
Posts: 86

PostPosted: Wed Sep 07, 2011 7:26 pm    Post subject: Reply with quote

zeig mal ein Beispiel wie es nicht geht.
Back to top
View user's profile Send private message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Wed Sep 07, 2011 7:32 pm    Post subject: Reply with quote

kommen tut sowas auf die art:

Code:
'catlinks' class
"visualClear"





"mw-head" class


"p-personal" class


"pt-login"




"left-navigation"


"p-namespaces" class


"ca-special" class






"p-variants" class
"#"
"menu"







"right-navigation"


"p-views" class








"p-cactions" class
"#"
"menu"








"p-search"
"searchInput"
"/w/index.php" id
'hidden' name
"simpleSearch"
"searchInput" name
"searchButton" type









"mw-panel" class

"p-logo"







"portal" id

"body"

"n-mainpage-description"
"n-aboutsite"
"n-topics"
"n-alphindex"
"n-randompage"







"portal" id

"body"

"n-help"
"n-portal"
"n-recentchanges"
"n-contact"
"n-sitesupport"







"portal" id

"body"

"t-specialpages"












"footer"
"footer-places"
"footer-places-privacy"
"footer-places-about"
"footer-places-disclaimer"
"footer-places-mobileview"

"footer-icons" class
"footer-copyrightico"
"http://wikimediafoundation.org/"

"footer-poweredbyico"
"http://www.mediawiki.org/"


"clear:both"


"text/javascript"





"/w/index.php?title
"http://bits.wikimedia.org/de.wikipedia.org/load.php?debug
"text/javascript"





"text/javascript" src
"text/javascript"

_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Wed Sep 07, 2011 8:28 pm    Post subject: Reply with quote

ich bin mir net sicher, aber hast du jetzt das
Code:
|grep "a href"|
rausgelassen? das sieht mir fast so aus.
lass doch mal die ausgabe von curl in eine datei umleiten und poste die mal (am besten paste service oder so und auchtung falls sessionids drin sind. die am besten rausmachen) und außerdem den befehl den du verwendest. dann lässt sich das besser nachvollziehen.
Back to top
View user's profile Send private message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Thu Sep 08, 2011 7:58 am    Post subject: Reply with quote

korrekt, das hab ich vergessen.

jetzt kommt aber:
Code:
curl "http://de.wikipedia.org/w/index.php?title=Spezial:Alle_Seiten" | grep 'href' | awk -F= '{ print $2 }' | awk -f\> '{ print $1 }'           
awk: can't open file { print $1 }
 source line number 1 source file { print $1 }
 context is
    >>>  <<<
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 54049  100 54049    0     0  61831      0 --:--:-- --:--:-- --:--:-- 67900

_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Thu Sep 08, 2011 8:53 am    Post subject: Reply with quote

auf den ersten blick würd ich sagen, das f beim zweiten awk muss groß sein
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Thu Sep 08, 2011 9:16 am    Post subject: Reply with quote

Code:
elinks -dump -no-numbering "http://de.wikipedia.org/w/index.php?title=Spezial:Alle_Seiten" | grep '^[ \t.]*http' | sed 's/^[ .\t]*//'


Einfach mal abgewöhnen in html mit regulären Ausdrücken rumzufuschen. Html ist nicht regulär.
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3495

PostPosted: Thu Sep 08, 2011 9:17 am    Post subject: Reply with quote

Parsen des HTML-Code liefert auch relative Links etc. zurück. Für "komplette" Links besser mit lynx:

(ungetestet aus dem Kopf)
Code:
lynx -dump "$url" | grep -e " .[0-9+]\.\ "| cut -d "." -f 2-


Da lassen sich noch schön weitere greps anhängen um die Links genauer zu selektieren.
Back to top
View user's profile Send private message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Thu Sep 08, 2011 6:51 pm    Post subject: Reply with quote

damit spuckt er mal links aus, aber längst nicht alle
_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
178238
n00b
n00b


Joined: 13 Dec 2007
Posts: 55

PostPosted: Thu Sep 08, 2011 10:53 pm    Post subject: Re: sed: link aus html file extrahieren Reply with quote

72_6f_6c_61_6e_64 wrote:
Was muss man sed als Parameter anhängen, dass er alles von "<a href" bis ">" (also der a-tag zu) ausgibt?


Nabend.
Eigentlich sollte das sein was du suchst:
Code:
curl -s "$URL" | sed -ne 's/.*href="\([^["]*\)".*/\1/pg'


Kann man evtl. noch verfeiner:
Code:
curl -s "$URL" | sed -ne 's/.*<a href="\(http:\/\/[^["]*\)".*/\1/pg'
Back to top
View user's profile Send private message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Sat Sep 10, 2011 6:16 pm    Post subject: Reply with quote

Hallo, die Sachen mit sed geben zwar links aus, aber noch immer nicht alles.

die links schauen so aus:

<a href="/w/index.php?title=Spezial:Alle_Seiten&amp;from=Alatriste&amp;to=Ali_Chamene%27i">Ali Chamene'i</a>

wie muss ich das dann anpassen?
_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
178238
n00b
n00b


Joined: 13 Dec 2007
Posts: 55

PostPosted: Sat Sep 10, 2011 8:17 pm    Post subject: Reply with quote

Sofern man wirklich nur sed hernehmen will würde ich das auf die Schnelle mal mit
Code:
curl -s "http://de.wikipedia.org/w/index.php?title=Spezial:Alle_Seiten"  | sed -e 's/href/\nhref/g' | sed -ne 's/.*href="\([^["]*\)".*/\1/pg'

...lösen. Ist für meinen Geschmack zwar unsauber, sollte aber zumindestens alle Links ausspucken.
Back to top
View user's profile Send private message
72_6f_6c_61_6e_64
Guru
Guru


Joined: 16 Nov 2009
Posts: 438
Location: 39° 6′ 18″ N, 76° 44′ 29″ W

PostPosted: Mon Sep 12, 2011 5:13 pm    Post subject: Reply with quote

alles kommt da aber immer noch nicht
_________________
Man gewöhnt sich an allem, sogar am Dativ.
Back to top
View user's profile Send private message
178238
n00b
n00b


Joined: 13 Dec 2007
Posts: 55

PostPosted: Mon Sep 12, 2011 6:16 pm    Post subject: Reply with quote

Da ich kein sed-Guru bin kann das durchaus sein ;) Ich muss mich dann allerdings auch Knieper anschließen: HTML und reguläre Ausdrücke vertragen sich nicht sonderlich. Dazu mal ein netter Artikel: http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html.
Ein anderes großes Problem ist IMHO die Tatsache, dass sed kein "non greedy matching" bietet. Hierzu evtl.: http://stackoverflow.com/questions/1103149/non-greedy-regex-matching-in-sed

Sofern man nun wirklich nur sed nehmen will und auf grep/awk/perl etc. völlig verzichtet, kommt man nicht darum herum sein sed script mehr oder weniger statisch an den zu erwartenden (html-)code anzupassen. Wenn nun z.B. mehrere Links pro Zeile kommen heißt das extra newlines am Ende eines Tags einzufügen und ähnliche Grausamkeiten. In dem Zusammenhang kannst du ja gerne den Link/Code posten um den es dir geht.

Kritik zu meinem Gesagtem ist durchaus erwünscht ;)
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum