Skocz do zawartości

Wydłubywanie danych z HTML


Maximus Marius

Rekomendowane odpowiedzi

Zastanawiam sie czy macie jakieś sprytne i proste sposoby na parsowanie HTML.

np. mam jakiś plik HTML i chciał bym wyciągnąc do zmiennej w PHP

wszystkie dane o kontrahentach które są np. zbudowane TAK:

<table>
<tr>
 <td>1
 </td>
 <td>
 Kowalski JAN
 </td>
</tr>
<tr>
 <td>2
 </td>
 <td>
 Malinowski Piotr
 </td>
</tr>
<tr>
 <td>3
 </td>
 <td>
 Zenek Karol
 </td>
</tr>
<tr>
 <td>4
 </td>
 <td>
 Wojciek Wojtek
 </td>
</tr>

Widać ze dane są powtarzalne według schematu

<td>||identyfikator||
 </td>
 <td>
 ||nazwisko||
 </td>

I teraz jest pytanie:

Czy jest jakas klasa do PHP która na podstawie pewnego szablonu jest w stanie

wyciągać dane z plików HTML ?

Aby uzyskać tablicę z wartościami:

1 Kowalski JAN

2 Malinowski Piotr

3 Zenek Karol

4 Wojciek Wojtek

Oczywiście mój przykład HTML jest banalny, chodzi o ideę

Odnośnik do komentarza
Udostępnij na innych stronach

Poprawnie zdefiniowana tabela ma węzły jak plik XML wiec powinno się z niej dać wyciągnąć dane z celi przy pomocy paserów XML jakie mamy do dyspozycji w PHP a zwłaszcza PHP 5.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Wyrażenia regularne mają jedną podstawową wadę:

-analizowana jest treść dokumentu HTML a nie jego budowa.

np.

<a href=https://seo4you.pl/ class=id>

<a class=id href=https://seo4you.pl/>

to dwa różne dane dla wyrażenia regularnego

Poprawnie zdefiniowana tabela ma węzły jak plik XML wiec powinno się z niej dać wyciągnąć dane z celi przy pomocy paserów XML jakie mamy do dyspozycji w PHP a zwłaszcza PHP 5.

testowałem sobie dla przykładu parser XML z php na przykładzie wyników Google, ale niestety format danych mu sie nie podobał :D

Odnośnik do komentarza
Udostępnij na innych stronach

Jak chodzi o parser XML miałem na myśli konkretny podany przez Ciebie przykład z tabelą.

W kwestii wyrażeń regularnych to zależy co przyjmiemy za ogranicznik, ale dodatkowo można napisać alternatywne wersje dopasować oddzielone znakiem | np: <a href=|<a class=id href= Napisanie właściwego wyrażenia to właściwie najtrudniejsze zadanie a nieraz takich rozbić na składowe należy zrobić znacznie więcej aby uzyskać np. same adresy www.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym to zrobił w prostu sposób tym bardziej że są dane schematyczne, wyciągasz poszczególne wiersze czyli to co jest pomiędzy <tr> czyli otrzymujesz Twój schemat i dalej preg_match na czymś takim i już mamy dane w tablicy.

Pewnie też można parserem XML ... ale jak go nie znasz to tak masz hmmm w 10 minut.

pozdrawiam

IE to taki program, który pozwala na oglądanie internetu z Twojego komputera i odwrotnie...

Odnośnik do komentarza
Udostępnij na innych stronach

Wyrażenia regularne mają jedną podstawową wadę:

-analizowana jest treść dokumentu HTML a nie jego budowa.

oj tam od czego jest .* ;-) zresztą jesli ciągniesz dane z jednej strony to budowa sie zbyt czesto nie zmienia :D

Odnośnik do komentarza
Udostępnij na innych stronach

NO własnie ! Wyrażenia regularne działają pięknie ale są trudne w tworzeniu [albo moje doświadczenie z nimi jest za małe]

Strony najczęsciej budowane są na podstawie jakiegoś tam szablonu, czy to jest smart czy tez kod generowany przez funkcję to i tak w wynikach otrzymujemy kod który ma w sobie TEN SZABLON, szukam więc funkcji odwrotnej mając wygenerowaną stronę i szablon chcę uzyskać dane.

Co już mi sie udało uzyskać:

mam już klasę która na podstawie szablonu jak ten: szablon_google_next_page.txt

<div class="nr">
</div>
{{strona}}
</a>
</td>
<td nowrap="nowrap">
<a href="{{urll}}">

wyciąga dane do zmiennych w PHP

przykładu użycia wygladał by tak

$ob= new Parser("plik_z_danymi.html");
$ob->wczytaj_szablon("szablon_google_next_page.txt");
while($ob->SaDane())
{
 $ob->PobierzDane(&dane);
 echo "Strona:  $dane['strona'] = $dane['url] <br>";
}

Proste i banalne

Tym sposobem powiedzmy ze zrealizowano wydłubanie czegoś z wyników google na ten przykład.

Niestety to co mam ja jest za proste i nadal nie spełnia moich wymagań :) Bo nadal poszukuje w dość banalny sposób i jakiekolwiek róznice pomiedzy moim szablonem a stroną która jest parsowana powodują ze dane nie są wydobywane.

szook - zobacze to tidy :) a nuż widelec

horacyleo - więkoszość stroni nie jest to XML i jako takie nie dają sie traktować przez parsery XML (moj przykład jest tylko dla przykładu :dirol: nie chodzi mi o tą konkretną tabelę,

Czy ja jestem dziwny że chcę takiego parsera ? Czy to ja mam tylko takie dziwne wymagania ?

Odnośnik do komentarza
Udostępnij na innych stronach

Wrzucasz do tablicy poprzez explode(); dzieląc w miejsu </tr>

Potem rekordy powyższej tablicy znowu explode(); dzieląc w miejsu </td> i wrzucasz do następnej tablicy.

A na koncu strip_tags();

To teraz trochę trudniejsze zadanie :

Wyciągnij kolejne strony z wyników google: 2 3 4 5 .....

Nie chodzi mi o napisanie kodu do parsowania jednej strony raczej o skuteczna petodę na dowolną stronę WWW :dirol:

tidy przetestowałem i teoretycznie za jego pomocą pożna by zbudować drzewo które potem podlegało by porównaniom

Odnośnik do komentarza
Udostępnij na innych stronach

wytnij z kodu strony kawalek ktory Cie interesuje poprzez substr, a następnie skorzystaj z prega w stylu

<td>(>*?)</td><td>(.*?)</td>

i już bez zabaw w dom'y etc :dirol:

Odnośnik do komentarza
Udostępnij na innych stronach

Wyciągnij kolejne strony z wyników google: 2 3 4 5 .....
www.google.pl/search?num=100
Nie chodzi mi o napisanie kodu do parsowania jednej strony raczej o skuteczna petodę na dowolną stronę WWW :dirol:
Z pierwszego postu wywnioskowałem że dane znajdują się w formie tabelarycznej gdzie dokładnie można przewidzieć ich strukturę. A teraz piszesz o dowolnych stronach.

.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności