Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parser HTML, Prosty, acz zasobożerny parser HTML
b4rt3kk
post
Post #1





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Witam,
przedstawiam do oceny parser HTML mojego autorstwa.

Plik do pobrania:
http://www.filedropper.com/htmlparserclassphp

Opis:
Zasada działania jest prosta, wystarczy zaincludować plik z klasą, która znajduje się w powyższym pliku. Następnie utworzyć nowy obiekt, np.
  1. $parser = new HTMLparser();

Dostępne są 3 metody pobierania HTML, który będziemy parsować:
- z pliku
  1. $parser->parseFile($dir);

- ze stringa
  1. $parser->parseString($string);

- z URL
  1. $parser->parseUrl($url);


Następnie wywołanie parsera:
  1. $resource = $parser->find('div');


Jako wynik zmienna $resource będzie przechowywać tablicę obiektów DIV-ów znalezionych w parsowanym źródle, bądź jeden obiekt, jeśli w metodzie find jako drugi argument podamy liczbę (wtedy zwróci n-ty DIV z parsowanego źródła).

Odczyt informacji:
Odczyt jest bardzo prosty, każdy wynik zawiera obiekty text oraz html, ponadto jeśli DIV posiada atrybuty, np. class bądź id zostaną one zwrócone również w postaci obiektów. Przykład:

  1. foreach ($resource as $div) {
  2. echo $div->text;
  3. echo $div->html;
  4. echo $div->class;
  5. // itd.
  6. }


To tak po krótce tytułem wstępu. Jednak parser wymaga optymalizacji, ponieważ czas parsowania średniej wielkości źródła jest dosyć długi. Proszę o oceny, a także o wskazanie dalszej drogi rozwoju owego parsera (zastanawiałem się jeszcze nad wyszukiwaniem elementów HTML np. po class, bądź po ID, jednak w tym momencie nie mam jeszcze pomysłu jak to zrealizować, bo już teraz parser w obecnej formie jest dość "ciężki"). Pozdrawiam i dzięki za ewentualne sugestie.

EDIT:
Zapomniałem dodać, możemy również szukać dzieci naszych wynikowych obiektów, np.
  1. foreach ($resource as $div) {
  2. echo $div->find('a', 0)->href;
  3. }


Możliwość zagnieżdżania jest nieograniczona.

Ten post edytował b4rt3kk 4.10.2013, 13:31:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mstraczkowski
post
Post #2





Grupa: Zarejestrowani
Postów: 273
Pomógł: 52
Dołączył: 3.02.2013
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


Na pierwszy rzut oka:

1. Brak modyfikatorów dostępu przy metodach
2. Dwie klasy w jednym pliku (tak nie powinno się pisać)
3. Mało komentarzy w kodzie oraz mało poprawne tagi phpdoc (@param, a nie @params)
4. Projektując klasę nie powinno się już raczej używać kończącego tagu php ?>
5. Słaba estetyka kodu

Ten post edytował mstraczkowski 4.10.2013, 15:41:02
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #3





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(mstraczkowski @ 4.10.2013, 16:40:24 ) *
Na pierwszy rzut oka:

1. Brak modyfikatorów dostępu przy metodach
2. Dwie klasy w jednym pliku (tak nie powinno się pisać)
3. Mało komentarzy w kodzie oraz mało poprawne tagi phpdoc (@param, a nie @params)
4. Projektując klasę nie powinno się już raczej używać kończącego tagu php ?>
5. Słaba estetyka kodu


Kolego, przepraszam bardzo, ale jak to się ma do zasadności mojego pytania, czyli optymalizacji? To że poprawie komentarz z params na param nie wpłynie w żaden sposób na wydajność klasy. W wersji skompresowanej nawet nie będzie tych komentarzy. Nie oceniasz mojego zeszytu do polskiego, żeby patrzeć na estetykę, czy przypisy na marginesie... Czy mogę liczyć na jakieś sensowne porady? Preg_match nie jest tam znów tak wiele, ale byłbym wdzięczny jakby mi ktoś wskazał choć jeden który mogę zastąpić inną, szybszą funkcją. Lub wykazał błędność mojego toku rozumowania. Ogólnie rzecz biorąc, nie chodzi o estetykę, a o użyteczność.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 13:06