ďťż

[PHP] Parsowanie HTML Wyciąganie wartości linków z <a href=

       

Podstrony


telcocafe

Witam, próbuję zrobić taką pseudo-wyszukiwarkę. Mechanizm przeszukiwania już jest, jestem w trakcie pisania "robota". Mam problem z wyciąganiem kolejnym linków z wartości <a href="..."> . Teoretycznie mogę za pomocą wyrażenie regularnego to wyciągnąć, ale muszę przewidzieć, że autor strony umieścił wartość linka pomiędzy cudzysłowami, apostrofami lub bez niczego. To nie jest najgorsze. Chciałbym przewidzieć każdą sytuację i zastanawiam się jak rozwiązać następujący problem:

1. Ktoś otworzył cudzysłów (apostrof) i na "końcu" linka chociażby przez nieuwagę zapomniał go zamknąć. Wtedy mogę nawet wyciągnąć cały dokument do końca.

Macie jakieś pomysły na to?



A może Document Object Model i GetElementsByTagName będzie tu rozwiązaniem?

chodnik: w PHP? A to ciekawe...

BTW: 1. możesz wyciągać do pozycji ">" - tak jest najlepiej. Sprawdzasz, czy przed jego pozycją nie ma przypadkiem cudzysłowie bądź apostrofa i już :)
Ja, jak robiłem parser newsów z wyciąganiem linków, to po prostu: strpos'em (może lekko zacofana metoda, ale skuteczna :P) szukałem <a href= , sprawdzałem jaki jest pierwszy znak a następnie szukałem go by wyciągnąć link (o ile pierwszym znakiem nie jest [np.] "h" (http) albo "f" (ftp)... - wtedy szukasz albo spacji, albo ">" :P).

DJ_ProG - Twój sposób jest dobry, ale nie do końca. Już go trochę rozważałem. Załóżmy, że najczęściej spotykamy się z <a href... ale jeśli ktoś robi np tak:
<a style="..." href="...
albo
<a id="..." href="...
To samo tyczy się końca znacznika. Jak poradzić sobie z takim czymś?
Użytkownik kutar edytował ten post 12 czerwiec 2007, 21:03


function tag_info($a_string) { $closing = false; if (eregi('</', $a_string)) { $closing = true; } $tag = str_replace("\t", ' ', $a_string); $tag = str_replace("\n", '', $tag); $tag = trim($tag); $tag = str_replace('</', '', $tag); $tag = str_replace('<', '', $tag); $tag = str_replace('>', '', $tag); $tag = explode(' ', $tag); $return = array(); $return['closing'] = $closing; $return['tag'] = strtolower($tag[0]); return $return; } ///przyklad $tag = '<A HREF="http://pbnan.jogger.pl/">'; $tag = tag_info($tag); echo $tag['tag']; //output: a
Kiedyś nagryzmoliłem coś takiego. Może się przyda zawartość tablicy $tag ;)
Oczywiście wyszukiwanie tych tagów sam sobie musisz zorganizować ;)


chodnik: w PHP? A to ciekawe...
Też mnie to zainteresowało. Dlatego lubię tego używać. Kilka informacji na ten temat można znaleźć na stronie http://www.php.net/m.../pl/ref.dom.php.
Ale powiem szczerze, że stosuję to tylko do dokumentów zgodnych z wymogami XML. Jednak sam DOM powinien działać też prawidłowo również ze specyfikacją HTML 4.01. Dlatego ja bym w pierwszej kolejności sprawdził, czy to zadziała dal wszystkich stron, niezależnie od DTD. Wtedy takie problemy jak to, czy po a jest najpierw style cze href przestają mieć istnieć.

pbnan - dzięki za kod, zobacze co z niego wykombinuję :) rzucę okiem też na to co zasugerował chodnik

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.