Pytanie Jak analizować i przetwarzać HTML / XML w PHP?


Jak można parsować HTML / XML i wyodrębniać z niego informacje?


1896
2017-08-26 17:19


pochodzenie




Odpowiedzi:


Natywne rozszerzenia XML

Wolę używać jednego z natywne rozszerzenia XML ponieważ są dostarczane w pakiecie z PHP, są zwykle szybsze niż wszystkie biblioteki innych producentów i zapewniają mi pełną kontrolę nad znacznikami.

DOM

Rozszerzenie DOM pozwala na obsługę dokumentów XML za pośrednictwem DOM API z PHP 5. Jest to implementacja W3C Document Object Model Core Level 3, interfejsu neutralnego dla platformy i języka, który pozwala programom i skryptom na dynamiczny dostęp i aktualizację zawartość, struktura i styl dokumentów.

DOM potrafi analizować i modyfikować rzeczywisty (zepsuty) kod HTML i może to zrobić Pytania XPath. Opiera się na libxml.

Uzyskanie produktywności za pomocą DOM zajmuje trochę czasu, ale ten czas jest warty tego IMO. Ponieważ DOM jest językowo-agnostycznym interfejsem, znajdziesz implementacje w wielu językach, więc jeśli potrzebujesz zmienić język programowania, prawdopodobnie będziesz już wiedział, jak używać DOM API tego języka.

Podstawowy przykład użycia można znaleźć w Pobieranie atrybutu href elementu A a ogólny przegląd pojęciowy można znaleźć na stronie DOMDocument w php

Sposób korzystania z rozszerzenia DOM został szczegółowo omówiony w StackOverflow, więc jeśli zdecydujesz się z niego skorzystać, możesz być pewien, że większość problemów, które napotkasz, można rozwiązać, przeszukując / przeglądając Stack Overflow.

XMLReader

Rozszerzenie XMLReader to analizator składni XML. Czytnik działa jak kursor w strumieniu dokumentów i zatrzymuje się w każdym węźle po drodze.

XMLReader, podobnie jak DOM, jest oparty na libxml. Nie mam pojęcia, jak uruchomić moduł analizatora składni HTML, więc prawdopodobnie używają XMLReader do analizowania zepsutego kodu HTML, który może być mniej niezawodny niż użycie DOM, w którym można jawnie powiedzieć, że używa on modułu analizatora składni libxml.

Podstawowy przykład użycia znajduje się pod adresem pobieranie wszystkich wartości ze znaczników h1 za pomocą php

Analizator składni XML

To rozszerzenie umożliwia tworzenie analizatorów składni XML, a następnie definiowanie procedur obsługi dla różnych zdarzeń XML. Każdy parser XML ma również kilka parametrów, które można dostosować.

Biblioteka XML Parser jest również oparta na libxml i implementuje a SAX stylowy parser wypychania XML. Może być lepszym wyborem do zarządzania pamięcią niż DOM lub SimpleXML, ale będzie trudniejsze w pracy niż program parserowy implementowany przez XMLReader.

SimpleXml

Rozszerzenie SimpleXML udostępnia bardzo prosty i łatwy w użyciu zestaw narzędzi do konwersji XML do obiektu, który może być przetwarzany za pomocą normalnych selektorów właściwości i iteratorów macierzy.

SimpleXML jest opcją, gdy wiesz, że HTML jest prawidłowym XHTML. Jeśli chcesz przeanalizować uszkodzony kod HTML, nie myśl nawet o SimpleXml, ponieważ będzie się dławił.

Podstawowy przykład użycia znajduje się pod adresem Prosty program do wartości węzła i węzła CRUD pliku xml i jest wiele dodatkowych przykładów w Podręczniku PHP.


Biblioteki 3rd Party (oparte na libxml)

Jeśli wolisz używać biblioteki innej firmy, sugeruję użycie biblioteki, która faktycznie używa DOM/libxml pod spodem zamiast analizowania ciągów.

FluentDom

FluentDOM zapewnia płynny interfejs XML podobny do jQuery dla DOMDocument w PHP. Selektory są zapisywane w XPath lub CSS (przy użyciu konwertera CSS do XPath). Obecne wersje rozszerzają standardowe interfejsy implementujące DOM i dodają funkcje z DOM Living Standard. FluentDOM może ładować formaty takie jak JSON, CSV, JsonML, RabbitFish i inne. Można zainstalować za pomocą Composer.

HtmlPageDom

Wa72 \ HtmlPageDom` to biblioteka PHP dla łatwej manipulacji HTML   wymagane dokumenty wymagają DomCrawler z Symfony2   składniki do przechodzenia przez   Drzewo DOM i rozszerza je, dodając metody manipulowania DOM   drzewo dokumentów HTML.

phpQuery (niezaktualizowane od lat)

phpQuery to oparty na serwerze, oparty na selektorach, oparty na selektorowym API Document Object Model (DOM) oparty na bibliotece JavaScript jQuery napisanej w PHP5 i zapewniający dodatkowy interfejs wiersza poleceń (CLI).

Zobacz także: https://github.com/electrolinux/phpquery

Zend_Dom

Zend_Dom udostępnia narzędzia do pracy z dokumentami i strukturami DOM. Obecnie oferujemy Zend_Dom_Query, która zapewnia ujednolicony interfejs do wyszukiwania dokumentów DOM z wykorzystaniem selektorów XPath i CSS.

QueryPath

QueryPath to biblioteka PHP do manipulowania XML i HTML. Został zaprojektowany do pracy nie tylko z plikami lokalnymi, ale także z usługami sieciowymi i zasobami bazy danych. Implementuje on większość interfejsu jQuery (w tym selektory stylu CSS), ale jest mocno dostrojony do wykorzystania po stronie serwera. Można zainstalować za pomocą Composer.

fDOMDocument

fDOMDocument rozszerza standardowy DOM, aby używać wyjątków przy wszystkich okazjach błędów zamiast ostrzeżeń PHP lub zawiadomień. Dodają również różne niestandardowe metody i skróty dla wygody i upraszczają korzystanie z DOM.

saber / xml

saber / xml to biblioteka, która owija i rozszerza klasy XMLReader i XMLWriter, aby utworzyć prosty system odwzorowania i wzornika "xml to object / array". Zapisywanie i odczytywanie XML jest jednoprzebiegowe i dlatego może być szybkie i wymaga małej ilości pamięci w dużych plikach xml.

FluidXML

FluidXML to biblioteka PHP do manipulowania XML za pomocą zwięzłego i płynnego API.   Wykorzystuje XPath i płynny styl programowania, aby być zabawnym i efektywnym.


Zewnętrzne (nie oparte na libxml)

Zaletą budowania na DOM / libxml jest to, że otrzymujesz dobrą wydajność po wyjęciu z pudełka, ponieważ opierasz się na natywnym rozszerzeniu. Jednak nie wszystkie biblioteki innych firm idą tą drogą. Niektóre z nich są wymienione poniżej

PHP Simple HTML DOM Parser

  • Analizator HTML DOM napisany w PHP5 + pozwala w prosty sposób modyfikować HTML!
  • Wymagaj PHP 5+.
  • Obsługuje nieprawidłowy HTML.
  • Znajdź znaczniki na stronie HTML z selektorami takimi jak jQuery.
  • Wyodrębnij zawartość z HTML w jednym wierszu.

Generalnie nie polecam tego parsera. Baza kodu jest okropna, a sam parser raczej powolny, a pamięć głodna. Nie wszystkie selektory jQuery (takie jak selektory dla dzieci) są możliwe. Każda biblioteka oparta na bibliotekach libxml powinna w ten sposób z łatwością prześcignąć wyniki.

PHP Html Parser

PHPHtmlParser to prosty, elastyczny parser html, który pozwala na wybieranie znaczników za pomocą dowolnego selektora css, takiego jak jQuery. Celem jest pomoc w opracowaniu narzędzi, które wymagają szybkiego i łatwego usuwania html, niezależnie od tego, czy jest on ważny, czy nie! Ten projekt był oryginalnie wspierany przez sunra / php-simple-html-dom-parser, ale wsparcie wydaje się zostać zatrzymane, więc ten projekt jest moją adaptacją jego poprzedniej pracy.

Ponownie, nie poleciłbym tego parsera. Jest raczej powolny przy dużym obciążeniu procesora. Nie ma również funkcji czyszczenia pamięci tworzonych obiektów DOM. Problemy te występują szczególnie w przypadku zagnieżdżonych pętli. Sama dokumentacja jest niedokładna i błędnie napisana, bez odpowiedzi na poprawki od 14 kwietnia 16.

Ganon

  • Uniwersalny tokenizer i analizator DOM DOM HTML / XML / RSS      
    • Umiejętność manipulowania elementami i ich atrybutami
    • Obsługuje nieprawidłowy kod HTML i UTF8
  • Potrafi wykonywać zaawansowane zapytania podobne do CSS3 na elementach (takich jak jQuery - obsługiwane przestrzenie nazw)
  • Upiększacz HTML (np. HTML Tidy)      
    • Minimalizuj CSS i JavaScript
    • Sortowanie atrybutów, zmiana wielkości liter, poprawne wcięcie itp.
  • Rozciągliwy      
    • Analizowanie dokumentów za pomocą wywołań zwrotnych na podstawie bieżącego znaku / tokena
    • Operacje rozdzielone na mniejsze funkcje w celu łatwego przesłonięcia
  • Szybko i łatwo

Nigdy tego nie użyłem. Nie mogę powiedzieć, czy to coś dobrego.


HTML 5

Możesz użyć powyższego do parsowania HTML5, ale mogą istnieć dziwactwa ze względu na znaczniki dozwolone przez HTML5. W przypadku HTML5 warto rozważyć użycie dedykowanego analizatora składni, np

html5lib

Implementacje w języku Python i PHP parsera HTML oparte na specyfikacji WHATWG HTML5 w celu zapewnienia maksymalnej zgodności z większymi przeglądarkami internetowymi.

Po sfinalizowaniu HTML5 możemy zobaczyć więcej dedykowanych analizatorów. W3 jest również blogiem autorstwa W3 How-To do parsowania html 5 to warto sprawdzić.


Usługi internetowe

Jeśli nie masz ochoty na programowanie PHP, możesz również korzystać z usług internetowych. Ogólnie rzecz biorąc, znalazłem dla nich niewielką użyteczność, ale to tylko ja i moje przypadki użycia.

YQL

Usługa internetowa YQL umożliwia aplikacjom wyszukiwanie, filtrowanie i łączenie danych z różnych źródeł w Internecie. Instrukcje YQL mają składnię podobną do SQL, znaną każdemu deweloperowi z doświadczeniem w bazie danych.

ScraperWiki.

Zewnętrzny interfejs ScraperWiki pozwala wyodrębnić dane w pożądanym formularzu do wykorzystania w Internecie lub we własnych aplikacjach. Możesz również wyodrębnić informacje o stanie każdego skrobaka.


Wyrażenia regularne

Ostatni i najmniej zalecane, możesz wyodrębnić dane z HTML za pomocą wyrażenia regularne. Generalnie odradza się używanie Wyrażeń regularnych w HTML.

Większość fragmentów, które można znaleźć w Internecie, aby dopasować znaczniki, jest krucha. W większości przypadków działają tylko dla bardzo konkretnego fragmentu HTML. Niewielkie zmiany w znacznikach, takie jak dodanie gdziekolwiek spacji lub dodanie lub zmiana atrybutów w znaczniku, mogą spowodować, że wyrażenie RegEx nie zostanie wykonane, gdy nie zostanie poprawnie napisane. Powinieneś wiedzieć, co robisz przed użyciem RegEx w HTML.

Parsery HTML znają już reguły syntaktyczne HTML. Wyrażenia regularne muszą być nauczane dla każdego nowego zapisu, które piszesz. RegEx są dobre w niektórych przypadkach, ale to naprawdę zależy od twojego przypadku użycia.

ty umie pisać bardziej niezawodne parsery, ale pisanie kompletny i niezawodny niestandardowy analizator składniowy z wyrażeń regularnych to strata czasu, gdy wyżej wymienione biblioteki już istnieją i wykonują znacznie lepszą pracę w tym zakresie.

Zobacz także Parsowanie html Droga Cthulhu


Książki

Jeśli chcesz wydać trochę pieniędzy, spójrz na

Nie jestem związany z architektem PHP lub autorami.


1719
2017-08-26 17:18



@Nie zależy to od twoich potrzeb. Nie potrzebuję kwerend CSS Selector, dlatego używam wyłącznie DOM z XPath. phpQuery ma być portem jQuery. Zend_Dom jest lekki. Naprawdę musisz je sprawdzić, aby zobaczyć, który najbardziej ci się podoba. - Gordon
Twój punkt dla nie używania PHP Prosty HTML DOM Parser wydaje się dyskusyjny. - Petah
Od 29 marca 2012 r. DOM nie obsługuje html5, XMLReader nie obsługuje HTML, a ostatnie zatwierdzenie na html5lib dla PHP jest we wrześniu 2009 r. Czego można użyć do analizy HTML5, HTML4 i XHTML? - Shiplu Mokaddim
@ Jimmy nie zawiera nic o cURL, ponieważ cURL nie jest narzędziem do parsowania i przetwarzania HTML / XML. cURL jest klientem dla różnych protokołów sieciowych. Na przykład możesz pobrać z nim strony internetowe. Większość powyższych bibliotek ma sposoby ładowania bezpośrednio adresów URL, więc nie potrzebujesz w ogóle cURL, na przykład DOM loadHTMLFile(). - Gordon
@Nasha Rozmyślnie wykluczyłem niesławny lord Zalgo z powyższej listy, ponieważ nie jest on zbyt pomocny na własną rękę i prowadzi do kultowego kultu, ponieważ został napisany. Ludzie zostali spoliczkowani za pomocą tego linku, bez względu na to, jak odpowiednie byłoby rozwiązanie regex. Aby uzyskać bardziej zrównoważoną opinię, zobacz link I zrobił włącz zamiast tego i przejrzyj komentarze na stronie stackoverflow.com/questions/4245008/... - Gordon


Próbować Prosty parser DOM HTML

  • Parser DOM HTML napisany w PHP 5+, który pozwala w prosty sposób manipulować HTML!
  • Wymagaj PHP 5+.
  • Obsługuje nieprawidłowy HTML.
  • Znajdź znaczniki na stronie HTML z selektorami takimi jak jQuery.
  • Wyodrębnij zawartość z HTML w jednym wierszu.
  • Pobieranie


Przykłady:


Jak zdobyć elementy HTML:

// Create DOM from URL or file
$html = file_get_html('http://www.example.com/');

// Find all images
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';


Jak modyfikować elementy HTML:

// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html;


Wyodrębnij zawartość z HTML:

// Dump contents (without tags) from HTML
echo file_get_html('http://www.google.com/')->plaintext;


Skrobanie Slashdot:

// Create DOM from URL
$html = file_get_html('http://slashdot.org/');

// Find all article blocks
foreach($html->find('div.article') as $article) {
    $item['title']     = $article->find('div.title', 0)->plaintext;
    $item['intro']    = $article->find('div.intro', 0)->plaintext;
    $item['details'] = $article->find('div.details', 0)->plaintext;
    $articles[] = $item;
}

print_r($articles);

303
2017-11-26 20:02



Po pierwsze są rzeczy, które muszę przygotować, na przykład zły kod DOM, kod Invlid, a także analizowanie js przeciwko silnikowi DNSBL, będzie to również wykorzystywane do wyszukiwania złośliwych witryn / treści, a także do tego, jak zbudowałem moją witrynę wokół frameworka i zbudował go musi być czysty, czytelny i dobrze zorganizowany. SimpleDim jest świetny, ale kod jest nieco brudny - RobertPitt
@Robert możesz również chcieć sprawdzić htmlpurifier.org dla rzeczy związanych z bezpieczeństwem. - Gordon
Ma jeden ważny punkt: simpleHTMLDOM jest trudny do przedłużenia, chyba że używasz wzoru dekoratora, który uważam za nieporęczny. Znalazłem się dreszcz samo wprowadzanie zmian w podstawowych klasach. - Erik
To, co zrobiłem, to poprowadziłem mój html przez porządek przed wysłaniem go do SimpleDOM. - MB34
Używam tego obecnie, działając jako część projektu do przetworzenia kilkuset adresów URL. Staje się bardzo powolny, a regularne limity czasu utrzymują się. Jest to świetny skrypt dla początkujących i intuicyjnie prosty w obsłudze, ale zbyt prosty w obsłudze dla bardziej zaawansowanych projektów. - luke_mclachlan


Po prostu użyj DOMDocument-> loadHTML () i skończyć z tym. Algorytm parsowania HTML libxml jest całkiem dobry i szybki, a wbrew powszechnym przekonaniom nie dusi źle skonstruowanego HTML.


224
2017-11-15 22:16



Prawdziwe. I działa z wbudowanymi klasami XPath i XSLTProcessor PHP, które doskonale nadają się do wydobywania treści. - Kornel
W przypadku naprawdę zniekształconego HTML, zawsze możesz go uruchomić przez htmltidy przed przekazaniem go do DOM. Ilekroć potrzebuję zeskanować dane z HTML, zawsze używam DOM, lub przynajmniej simplexml. - Frank Farmer
Kolejna sprawa z ładowaniem nieprawidłowo sformatowanego kodu HTML i, że warto wywołać funkcję libxml_use_internal_errors (true), aby uniknąć ostrzeżeń, które przestaną analizować. - Husky
Użyłem DOMDocument do parsowania około 1000 html źródeł (w różnych językach kodowanych różnymi zestawami znaków) bez żadnych problemów. Możesz napotkać na problemy z kodowaniem, ale nie są one nie do pokonania. Musisz znać 3 rzeczy: 1) loadHTML używa zestawu znaków meta tagu do określenia kodowania 2) # 2 może prowadzić do nieprawidłowego wykrycia kodowania, jeśli zawartość html nie zawiera tych informacji 3) złe znaki UTF-8 mogą wyzwolić parser. W takich przypadkach użyj kombinacji mb_detect_encoding () i Simplepie RSS Parser do kodowania / konwersji / usuwania złych kodów znaków UTF-8 dla obejścia. - Zero
DOM faktycznie obsługuje XPath, spójrz na DOMXPath. - Ryan McCue


Dlaczego nie powinieneś i kiedy powinieneś używać wyrażeń regularnych?

Po pierwsze, często mylące: Regeksy nie są przeznaczone "rozbiór gramatyczny zdania" HTML. Jednak Regexes może "wyciąg" dane. Wyodrębnianie jest tym, do czego są stworzone. Główną wadą wyodrębniania HTML wyrażenia regularnego nad odpowiednimi zestawami narzędzi SGML lub bazowymi analizatorami składni XML jest ich syntaktyczny wysiłek i zmienna niezawodność.

Zastanów się nad stworzeniem w miarę niezawodnego regexu wyodrębniania HTML:

<a\s+class="?playbutton\d?[^>]+id="(\d+)".+?    <a\s+class="[\w\s]*title
[\w\s]*"[^>]+href="(http://[^">]+)"[^>]*>([^<>]+)</a>.+?

jest mniej czytelny niż prosty odpowiednik phpQuery lub QueryPath:

$div->find(".stationcool a")->attr("title");

Istnieją jednak konkretne przypadki użycia, w których mogą pomóc.

  • Wiele nakładek na przechodzenie przez DOM nie ujawnia komentarzy HTML <!--, które jednak są czasem bardziej przydatnymi kotwicami do ekstrakcji. W szczególności odmiany pseudo HTML <$var> lub reszty SGML można łatwo oswoić za pomocą wyrażeń regularnych.
  • Często wyrażenia regularne mogą oszczędzać przetwarzanie końcowe. Jednak jednostki HTML często wymagają ręcznego dozorowania.
  • I na koniec, dla ex niezwykle proste zadania jak wyodrębnianie adresów URL <img src =, są one w rzeczywistości prawdopodobnym narzędziem. Przewaga prędkości nad parserami SGML / XML jest po prostu dostępna dla tych bardzo podstawowych procedur ekstrakcji.

Czasem nawet wskazane jest wstępne wyodrębnienie fragmentu kodu HTML za pomocą wyrażeń regularnych /<!--CONTENT-->(.+?)<!--END-->/i przetwarzaj resztę za pomocą prostszych frontendów parsera HTML.

Uwaga: Tak naprawdę to mam aplikacja, gdzie na przemian stosuję parsowanie XML i wyrażenia regularne. W zeszłym tygodniu parsowanie PyQuery zepsuło się, a regex nadal działał. Tak dziwne, i nie potrafię tego sam wytłumaczyć. Ale tak się stało.
Więc proszę, nie głosujcie na kwestie ze świata rzeczywistego, tylko dlatego, że nie pasują do regex = evil meme. Ale nie głosujmy tak zbyt wiele. To tylko senuote na ten temat.


136
2018-05-01 02:04



DOMComment może czytać komentarze, więc nie ma powodu, aby używać Regex do tego. - Gordon
Ani zestawy narzędzi SGML, ani parsery XML nie są odpowiednie do analizowania kodu HTML. W tym celu odpowiedni jest tylko dedykowany analizator składni HTML. - Alohci
@Alohci DOM używa libxml i libxml ma osobny parser HTML moduł, który będzie używany podczas ładowania HTML loadHTML() więc może bardzo załadować "real-world" (odczytać zepsuty) HTML. - Gordon
Cóż, tylko komentarz na temat twojego punktu widzenia "w prawdziwym świecie". Oczywiście, są tam przydatne sytuacje dla Regex podczas parsowania HTML. I są też przydatne sytuacje do używania GOTO. I są użyteczne sytuacje dla zmiennych zmiennych. Tak więc żadna konkretna implementacja nie jest definitywnie gniciem kodu dla jej używania. Ale jest to bardzo silny znak ostrzegawczy. A przeciętny programista prawdopodobnie nie będzie wystarczająco zniuansowany, by odróżnić. Zasadniczo Regex GOTO i Zmienne Zmienne są złe. Istnieją nieuczciwe zastosowania, ale są to wyjątki (i rzadko) ... (IMHO) - ircmaxell
@mario: Właściwie HTML mogą być "poprawnie" analizowane za pomocą wyrażeń regularnych, chociaż zwykle zajmuje to kilka z nich, aby wykonać uczciwą pracę. To po prostu królewski ból w ogólnym przypadku. W konkretnych przypadkach z dobrze zdefiniowanymi danymi wejściowymi jest to banalne. To są przypadki, które ludzie powinien używać wyrażeń regularnych. Wielkie, stare, głodne, ciężkie parsery są naprawdę tym, czego potrzebujesz do ogólnych przypadków, chociaż nie zawsze jest jasne dla zwykłego użytkownika, gdzie narysować tę linię. Którykolwiek kod jest prostszy i łatwiejszy, wygrywa. - tchrist


phpQuery i QueryPath są bardzo podobne w replikowaniu płynnego interfejsu API jQuery. Właśnie dlatego są to dwa z najłatwiejszych podejść prawidłowo parsować HTML w PHP.

Przykłady dla QueryPath

Zasadniczo najpierw utworzymy zapytanie do drzewa DOM z ciągu HTML:

 $qp = qp("<html><body><h1>title</h1>..."); // or give filename or URL

Wynikowy obiekt zawiera pełną reprezentację drzewa dokumentu HTML. Można go wykonać za pomocą metod DOM. Ale wspólnym podejściem jest użycie selektorów CSS, jak w jQuery:

 $qp->find("div.classname")->children()->...;

 foreach ($qp->find("p img") as $img) {
     print qp($img)->attr("src");
 }

Głównie chcesz użyć prostego #id i .class lub DIV selektory znaczników dla ->find(). Ale możesz również użyć XPath wypowiedzi, które czasami są szybsze. Również typowe metody jQuery jak ->children() i ->text() a szczególnie ->attr() uprościć wyodrębnianie właściwych fragmentów kodu HTML. (I już mają zdekodowane ich elementy SGML.)

 $qp->xpath("//div/p[1]");  // get first paragraph in a div

QueryPath pozwala również na wstrzykiwanie nowych tagów do strumienia (->append), a następnie wydrukować i udoskonalić zaktualizowany dokument (->writeHTML). Może analizować nie tylko zniekształcony HTML, ale także różne dialekty XML (z przestrzeniami nazw), a nawet wyodrębniać dane z mikroformatów HTML (XFN, vCard).

 $qp->find("a[target=_blank]")->toggleClass("usability-blunder");

.

phpQuery lub QueryPath?

Ogólnie QueryPath jest lepiej przystosowany do manipulacji dokumentami. Podczas gdy phpQuery implementuje również niektóre metody pseudo AJAX (tylko żądania HTTP), aby bardziej przypominać jQuery. Mówi się, że phpQuery jest często szybszy niż QueryPath (ze względu na mniej ogólnych cech).

Więcej informacji na temat różnic patrz to porównanie na maszynie wayback z tagbyte.org. (Pierwotne źródło zaginęło, więc tutaj jest link do archiwum w Internecie. Tak, nadal możesz znaleźć brakujące strony, ludzie.)

I oto jest kompleksowe wprowadzenie do QueryPath.

Zalety

  • Prostota i niezawodność
  • Proste w użyciu alternatywy ->find("a img, a object, div a")
  • Odpowiednie usuwanie danych (w porównaniu do wyrażeń regularnych grepping)

126
2017-08-26 17:20





Prosty HTML DOM to świetny parser open-source:

simplehtmldom.sourceforge

Traktuje elementy DOM w sposób zorientowany obiektowo, a nowa iteracja ma duży zasięg dla niezgodnego kodu. Istnieje również kilka świetnych funkcji, takich jak w JavaScript, takich jak funkcja "znajdź", która zwróci wszystkie wystąpienia elementów tej nazwy znacznika.

Używałem tego w wielu narzędziach, testując je na wielu różnych typach stron internetowych i myślę, że działa świetnie.


85
2017-10-04 13:14





Jednym z ogólnych podejść, o których tu nie wspomniałem, jest uruchomienie kodu HTML Uporządkowane, które można ustawić tak, aby wypluło gwarantowane poprawne XHTML. Następnie możesz użyć dowolnej starej biblioteki XML.

Ale do twojego konkretnego problemu powinieneś rzucić okiem na ten projekt: http://fivefilters.org/content-only/ - jest zmodyfikowaną wersją Czytelność algorytm, który ma na celu wyodrębnienie z strony tylko treści tekstowych (nie nagłówków i stopek).


58
2017-11-06 21:02





Dla 1a i 2: głosowałbym na nową klasę Symfony Componet DOMCrawler ( DomCrawler ). Ta klasa pozwala na zapytania podobne do selektorów CSS. Rzuć okiem na tę prezentację na przykładach z życia wziętych: news-of-the-symfony2-world.

Komponent jest zaprojektowany do pracy samodzielnej i może być używany bez Symfony.

Jedyną wadą jest to, że będzie działać tylko z PHP 5.3 lub nowszym.


54
2018-04-14 19:08



podobne do jquery zapytania css są dobrze powiedziane, ponieważ są pewne rzeczy, których brakuje w dokumentacji w3c, ale są obecne jako dodatkowe funkcje w jquery. - Nikola Petkanski