Bagaimana seseorang dapat mem-parsing HTML / XML dan mengekstrak informasi darinya?
sumber
Bagaimana seseorang dapat mem-parsing HTML / XML dan mengekstrak informasi darinya?
Saya lebih suka menggunakan salah satu ekstensi XML asli karena mereka dibundel dengan PHP, biasanya lebih cepat dari semua lib pihak ke-3 dan memberi saya semua kontrol yang saya butuhkan atas markup.
Ekstensi DOM memungkinkan Anda untuk beroperasi pada dokumen XML melalui DOM API dengan PHP 5. Ini adalah implementasi dari W3C's Document Object Model Core Level 3, antarmuka platform dan bahasa-netral yang memungkinkan program dan skrip untuk mengakses dan memperbarui secara dinamis konten, struktur dan gaya dokumen.
DOM mampu mem-parsing dan memodifikasi dunia nyata (rusak) HTML dan dapat melakukan permintaan XPath . Itu didasarkan pada libxml .
Butuh beberapa waktu untuk menjadi produktif dengan DOM, tetapi waktu itu sangat berharga untuk IMO. Karena DOM adalah antarmuka bahasa-agnostik, Anda akan menemukan implementasi dalam banyak bahasa, jadi jika Anda perlu mengubah bahasa pemrograman Anda, kemungkinan Anda sudah tahu cara menggunakan DOM API bahasa itu.
Contoh penggunaan dasar dapat ditemukan dalam Meraih atribut href dari elemen A dan gambaran umum konseptual umum dapat ditemukan di DOMDocument di php
Cara menggunakan ekstensi DOM telah dibahas secara luas di StackOverflow , jadi jika Anda memilih untuk menggunakannya, Anda dapat yakin bahwa sebagian besar masalah yang Anda hadapi dapat diselesaikan dengan mencari / menelusuri Stack Overflow.
Ekstensi XMLReader adalah parser tarikan XML. Pembaca bertindak sebagai kursor maju pada aliran dokumen dan berhenti di setiap node di jalan.
XMLReader, seperti DOM, didasarkan pada libxml. Saya tidak tahu bagaimana cara memicu Modul Parser HTML, jadi kemungkinan menggunakan XMLReader untuk mem-parsing HTML yang rusak mungkin kurang kuat daripada menggunakan DOM di mana Anda dapat secara eksplisit mengatakannya untuk menggunakan Modul Parser HTML libxml.
Contoh penggunaan dasar dapat ditemukan untuk mendapatkan semua nilai dari tag h1 menggunakan php
Ekstensi ini memungkinkan Anda membuat parser XML dan kemudian menentukan penangan untuk berbagai acara XML. Setiap parser XML juga memiliki beberapa parameter yang dapat Anda sesuaikan.
Pustaka XML Parser juga didasarkan pada libxml, dan mengimplementasikan parser dorong XML gaya SAX . Ini mungkin merupakan pilihan yang lebih baik untuk manajemen memori daripada DOM atau SimpleXML, tetapi akan lebih sulit untuk bekerja dengan daripada parser tarik yang diterapkan oleh XMLReader.
Ekstensi SimpleXML menyediakan toolset yang sangat sederhana dan mudah digunakan untuk mengkonversi XML ke objek yang dapat diproses dengan pemilih properti normal dan array iterator.
SimpleXML adalah opsi ketika Anda tahu HTML itu valid XHTML. Jika Anda perlu mem-parsing HTML yang rusak, bahkan tidak mempertimbangkan SimpleXml karena itu akan tersedak.
Contoh penggunaan dasar dapat ditemukan di Program sederhana untuk simpul CRUD dan nilai simpul file xml dan ada banyak contoh tambahan dalam Manual PHP .
Jika Anda lebih suka menggunakan lib pihak ke-3, saya sarankan menggunakan lib yang benar-benar menggunakan DOM / libxml di bawahnya alih-alih parsing string.
FluentDOM menyediakan antarmuka XML fasih seperti jQuery untuk DOMDocument di PHP. Selektor ditulis dalam XPath atau CSS (menggunakan pengonversi CSS ke XPath). Versi saat ini memperluas DOM yang mengimplementasikan antarmuka standar dan menambahkan fitur dari DOM Living Standard. FluentDOM dapat memuat format seperti JSON, CSV, JsonML, RabbitFish dan lainnya. Dapat diinstal melalui Komposer.
Wa72 \ HtmlPageDom` adalah pustaka PHP untuk memudahkan manipulasi dokumen HTML dengan menggunakan itu membutuhkan DomCrawler dari komponen Symfony2 untuk melintasi pohon DOM dan memperluasnya dengan menambahkan metode untuk memanipulasi pohon DOM dokumen HTML.
phpQuery adalah API Document Object Model (DOM) API sisi-server, rantaiable, didorong selektor berdasarkan jQuery JavaScript Library yang ditulis dalam PHP5 dan menyediakan tambahan Command Line Interface (CLI).
Lihat juga: https://github.com/electrolinux/phpquery
Zend_Dom menyediakan alat untuk bekerja dengan dokumen dan struktur DOM. Saat ini, kami menawarkan Zend_Dom_Query, yang menyediakan antarmuka terpadu untuk menanyakan dokumen DOM menggunakan pemilih XPath dan CSS.
QueryPath adalah perpustakaan PHP untuk memanipulasi XML dan HTML. Ini dirancang untuk bekerja tidak hanya dengan file lokal, tetapi juga dengan layanan web dan sumber daya database. Ini mengimplementasikan banyak antarmuka jQuery (termasuk pemilih CSS-style), tetapi sangat disetel untuk penggunaan sisi server. Dapat diinstal melalui Komposer.
fDOMDocument memperluas DOM standar untuk menggunakan pengecualian pada semua kesempatan kesalahan alih-alih peringatan atau pemberitahuan PHP. Mereka juga menambahkan berbagai metode khusus dan cara pintas untuk kenyamanan dan untuk menyederhanakan penggunaan DOM.
saber / xml adalah perpustakaan yang membungkus dan memperluas kelas XMLReader dan XMLWriter untuk membuat sistem pemetaan "xml to object / array" sederhana dan pola desain. Menulis dan membaca XML adalah single-pass dan karenanya cepat dan membutuhkan memori rendah pada file xml besar.
FluidXML adalah perpustakaan PHP untuk memanipulasi XML dengan API yang ringkas dan lancar. Ini memanfaatkan XPath dan pola pemrograman yang lancar agar menyenangkan dan efektif.
Manfaat membangun berdasarkan DOM / libxml adalah Anda mendapatkan kinerja yang baik karena Anda didasarkan pada ekstensi asli. Namun, tidak semua lib pihak ketiga turun rute ini. Beberapa dari mereka tercantum di bawah ini
- Pengurai HTML DOM yang ditulis dalam PHP5 + memungkinkan Anda memanipulasi HTML dengan cara yang sangat mudah!
- Membutuhkan PHP 5+.
- Mendukung HTML yang tidak valid.
- Temukan tag pada halaman HTML dengan pemilih seperti jQuery.
- Ekstrak konten dari HTML dalam satu baris.
Saya biasanya tidak merekomendasikan parser ini. Basis kode mengerikan dan parser itu sendiri agak lambat dan memori haus. Tidak semua penyeleksi jQuery (seperti penyeleksi anak ) dimungkinkan. Pustaka berbasis libxml mana pun harus mengungguli ini dengan mudah.
PHPHtmlParser adalah parser html sederhana, fleksibel, yang memungkinkan Anda memilih tag menggunakan pemilih css, seperti jQuery. Tujuannya adalah untuk membantu pengembangan alat yang membutuhkan cara cepat dan mudah untuk menghapus html, apakah itu valid atau tidak! Proyek ini asli didukung oleh sunra / php-simple-html-dom-parser tetapi dukungannya tampaknya telah berhenti sehingga proyek ini adalah adaptasi saya dari karya sebelumnya.
Sekali lagi, saya tidak akan merekomendasikan parser ini. Agak lambat dengan penggunaan CPU yang tinggi. Juga tidak ada fungsi untuk menghapus memori objek DOM yang dibuat. Masalah-masalah ini berskala terutama dengan loop bersarang. Dokumentasi itu sendiri tidak akurat dan salah eja, tanpa respons terhadap perbaikan sejak 14 Apr 16.
- Token universal dan Parser HTML / XML / RSS DOM
- Kemampuan untuk memanipulasi elemen dan atributnya
- Mendukung HTML dan UTF8 yang tidak valid
- Dapat melakukan kueri mirip CSS3 canggih pada elemen (seperti jQuery - namespaces didukung)
- Perindah HTML (seperti Tidy HTML)
- Minimalkan CSS dan Javascript
- Mengurutkan atribut, mengubah huruf besar-kecil, indentasi yang benar, dll.
- Dapat diperpanjang
- Parsing dokumen menggunakan panggilan balik berdasarkan karakter / token saat ini
- Operasi dipisahkan dalam fungsi yang lebih kecil untuk penggantian yang mudah
- Cepat dan mudah
Tidak pernah menggunakannya. Tidak tahu apakah itu bagus.
Anda dapat menggunakan hal di atas untuk parsing HTML5, tetapi mungkin ada kebiasaan karena markup memungkinkan HTML5. Jadi untuk HTML5 Anda ingin mempertimbangkan untuk menggunakan parser khusus
Implementasi Python dan PHP dari parser HTML berdasarkan pada spesifikasi WHATWG HTML5 untuk kompatibilitas maksimum dengan browser web desktop utama.
Kita mungkin melihat lebih banyak pengurai khusus setelah HTML5 selesai. Ada juga blogpost oleh W3 yang berjudul How-To untuk parsing html 5 yang layak untuk dicoba.
Jika Anda merasa tidak ingin pemrograman PHP, Anda juga dapat menggunakan layanan Web. Secara umum, saya menemukan sangat sedikit utilitas untuk ini, tapi itu hanya saya dan kasus penggunaan saya.
Antarmuka eksternal ScraperWiki memungkinkan Anda untuk mengekstrak data dalam bentuk yang Anda inginkan untuk digunakan di web atau di aplikasi Anda sendiri. Anda juga dapat mengekstrak informasi tentang status pengikis apa pun.
Terakhir dan paling tidak disarankan , Anda dapat mengekstrak data dari HTML dengan ekspresi reguler . Secara umum menggunakan Ekspresi Reguler pada HTML tidak disarankan.
Sebagian besar cuplikan yang Anda temukan di web untuk mencocokkan markup adalah rapuh. Dalam kebanyakan kasus mereka hanya bekerja untuk bagian HTML yang sangat khusus. Perubahan markup kecil, seperti menambahkan spasi putih di suatu tempat, atau menambahkan, atau mengubah atribut dalam tag, dapat membuat RegEx gagal ketika tidak ditulis dengan benar. Anda harus tahu apa yang Anda lakukan sebelum menggunakan RegEx di HTML.
Pengurai HTML sudah mengetahui aturan sintaksis HTML. Ekspresi reguler harus diajarkan untuk setiap RegEx baru yang Anda tulis. RegEx baik-baik saja dalam beberapa kasus, tetapi itu benar-benar tergantung pada kasus penggunaan Anda.
Anda bisa menulis parser yang lebih andal , tetapi menulis yang lengkap dan andal parser khusus yang dengan ekspresi reguler adalah buang-buang waktu ketika pustaka yang disebutkan di atas sudah ada dan melakukan pekerjaan yang jauh lebih baik dalam hal ini.
Juga lihat Parsing Html The Cthulhu Way
Jika Anda ingin menghabiskan uang, lihatlah
Saya tidak berafiliasi dengan Arsitek PHP atau penulis.
Coba Parser DOM HTML Sederhana
Contoh:
Cara mendapatkan elemen HTML:
Cara memodifikasi elemen HTML:
Ekstrak konten dari HTML:
Scraping Slashdot:
sumber
Cukup gunakan DOMDocument-> loadHTML () dan selesai dengan itu. Algoritma parsing HTML libxml cukup baik dan cepat, dan bertentangan dengan kepercayaan populer, tidak tersedak HTML yang cacat.
sumber
Mengapa Anda tidak harus dan kapan Anda harus menggunakan ekspresi reguler?
Pertama, kesalahan nama umum: Regexps bukan untuk " parsing " HTML. Namun Regex dapat " mengekstrak " data. Ekstrak adalah tujuan mereka dibuat. Kelemahan utama dari ekstraksi HTML regex atas toolkit SGML yang tepat atau parser XML dasar adalah upaya sintaksis dan keandalan yang beragam.
Pertimbangkan bahwa membuat regex ekstraksi HTML yang agak dapat diandalkan:
jauh lebih mudah dibaca dibandingkan dengan phpQuery atau QueryPath yang sederhana:
Namun ada kasus penggunaan khusus di mana mereka dapat membantu.
<!--
, yang terkadang merupakan jangkar yang lebih berguna untuk ekstraksi. Khususnya variasi pseudo-HTML<$var>
atau residu SGML mudah dijinakkan dengan regexps.Kadang-kadang bahkan disarankan untuk mengekstraksi cuplikan HTML menggunakan ekspresi reguler
/<!--CONTENT-->(.+?)<!--END-->/
dan memproses sisanya menggunakan antarmuka parser HTML yang lebih sederhana.Catatan: Saya sebenarnya memiliki aplikasi ini , di mana saya menggunakan parsing XML dan ekspresi reguler sebagai gantinya. Baru minggu lalu parsing PyQuery rusak, dan regex masih bekerja. Ya aneh, dan saya tidak bisa menjelaskannya sendiri. Tapi begitulah yang terjadi.
Jadi tolong jangan memilih pertimbangan dunia nyata turun, hanya karena tidak cocok dengan regex = meme jahat. Tapi mari kita juga jangan memilih ini terlalu banyak. Itu hanya sidenote untuk topik ini.
sumber
DOMComment
dapat membaca komentar, jadi tidak ada alasan untuk menggunakan Regex untuk itu.DOM
menggunakan libxml dan libxml memiliki modul parser HTML terpisah yang akan digunakan saat memuat HTMLloadHTML()
sehingga sangat banyak memuat "dunia nyata" (baca rusak) HTML.phpQuery dan QueryPath sangat mirip dalam mereplikasi API jQuery yang lancar. Itu juga mengapa mereka dua pendekatan termudah untuk mem-parsing HTML dengan benar di PHP.
Contoh untuk QueryPath
Pada dasarnya, Anda pertama kali membuat pohon DOM yang dapat dicari dari string HTML:
Objek yang dihasilkan berisi representasi pohon lengkap dari dokumen HTML. Itu dapat dilalui menggunakan metode DOM. Tetapi pendekatan umum adalah menggunakan penyeleksi CSS seperti di jQuery:
Sebagian besar Anda ingin menggunakan penyeleksi sederhana
#id
dan.class
atauDIV
tag untuk->find()
. Tapi Anda juga bisa menggunakan pernyataan XPath , yang terkadang lebih cepat. Juga metode jQuery yang khas seperti->children()
dan->text()
dan khususnya->attr()
menyederhanakan mengekstrak cuplikan HTML yang tepat. (Dan entitas SGML mereka sudah diterjemahkan.)QueryPath juga memungkinkan menyuntikkan tag baru ke dalam aliran (
->append
), dan kemudian menghasilkan dan mempra cantik dokumen yang diperbarui (->writeHTML
). Itu tidak hanya dapat menguraikan HTML cacat, tetapi juga berbagai dialek XML (dengan ruang nama), dan bahkan mengekstrak data dari mikroformats HTML (XFN, vCard)..
phpQuery atau QueryPath?
Secara umum QueryPath lebih cocok untuk memanipulasi dokumen. Sementara phpQuery juga mengimplementasikan beberapa metode pseudo AJAX (hanya permintaan HTTP) agar lebih mirip dengan jQuery. Dikatakan bahwa phpQuery seringkali lebih cepat daripada QueryPath (karena lebih sedikit fitur keseluruhan).
Untuk informasi lebih lanjut tentang perbedaan lihat perbandingan ini pada mesin wayback dari tagbyte.org . (Sumber asli hilang, jadi inilah tautan arsip internet. Ya, Anda masih dapat menemukan halaman yang hilang, orang-orang.)
Dan inilah pengantar QueryPath yang komprehensif .
Keuntungan
->find("a img, a object, div a")
sumber
Simple HTML DOM adalah parser open-source yang bagus:
simplehtmldom.sourceforge
Ini memperlakukan elemen DOM dengan cara yang berorientasi objek, dan iterasi baru memiliki banyak cakupan untuk kode yang tidak sesuai. Ada juga beberapa fungsi hebat yang akan Anda lihat di JavaScript, seperti fungsi "find", yang akan mengembalikan semua instance elemen dari nama tag itu.
Saya telah menggunakan ini di sejumlah alat, mengujinya pada berbagai jenis halaman web, dan saya pikir ini berfungsi dengan baik.
sumber
Salah satu pendekatan umum yang belum pernah saya sebutkan di sini adalah menjalankan HTML melalui Tidy , yang dapat diatur untuk meludahkan XHTML yang dijamin-valid. Kemudian Anda bisa menggunakan pustaka XML lama di atasnya.
Tetapi untuk masalah spesifik Anda, Anda harus melihat proyek ini: http://fivefilters.org/content-only/ - ini adalah versi modifikasi dari algoritma Keterbacaan , yang dirancang untuk mengekstrak hanya konten teks (bukan tajuk dan footer) dari sebuah halaman.
sumber
Untuk 1a dan 2: Saya akan memilih kelas Symfony Componet baru DOMCrawler ( DomCrawler ). Kelas ini memungkinkan kueri yang mirip dengan Penyeleksi CSS. Lihatlah presentasi ini untuk contoh dunia nyata: news-of-the-symfony2-world .
Komponen dirancang untuk bekerja mandiri dan dapat digunakan tanpa Symfony.
Satu-satunya kelemahan adalah bahwa itu hanya akan bekerja dengan PHP 5.3 atau lebih baru.
sumber
Ngomong -ngomong, ini biasa disebut pengikisan layar . Perpustakaan yang saya gunakan untuk ini adalah Simple HTML Dom Parser .
sumber
Kami telah membuat beberapa crawler untuk kebutuhan kami sebelumnya. Pada akhirnya, biasanya adalah ekspresi reguler sederhana yang melakukan hal terbaik. Meskipun pustaka yang tercantum di atas baik untuk alasan pustaka tersebut dibuat, jika Anda tahu apa yang Anda cari, ekspresi reguler adalah cara yang lebih aman untuk digunakan, karena Anda juga dapat menangani struktur HTML / XHTML yang tidak valid , yang akan gagal, jika dimuat melalui sebagian besar parser.
sumber
Saya merekomendasikan PHP Parser DOM HTML Sederhana .
Ini benar-benar memiliki fitur yang bagus, seperti:
sumber
Ini kedengarannya seperti deskripsi tugas yang baik dari teknologi W3C XPath . Sangat mudah untuk mengekspresikan kueri seperti "kembalikan semua
href
atribut dalamimg
tag yang bersarang<foo><bar><baz> elements
." Bukan sebagai penggemar PHP, saya tidak bisa memberi tahu Anda dalam bentuk apa XPath mungkin tersedia. Jika Anda dapat memanggil program eksternal untuk memproses file HTML, Anda harus dapat menggunakan versi baris perintah XPath. Untuk pengantar cepat, lihat http://en.wikipedia.org/wiki/XPath .sumber
Alternatif pihak ketiga untuk SimpleHtmlDom yang menggunakan DOM bukannya String Parsing: phpQuery , Zend_Dom , QueryPath dan FluentDom .
sumber
Ya, Anda dapat menggunakan simple_html_dom untuk tujuan tersebut. Namun saya telah bekerja cukup banyak dengan simple_html_dom, khususnya untuk scrapping web dan merasa terlalu rentan. Ini melakukan pekerjaan dasar tetapi saya tidak akan merekomendasikannya.
Saya tidak pernah menggunakan curl untuk tujuan itu tetapi yang saya pelajari adalah curl dapat melakukan pekerjaan dengan lebih efisien dan jauh lebih solid.
Silakan periksa tautan ini: scraping-websites-with-curl
sumber
QueryPath bagus, tetapi hati-hati dengan "status pelacakan" karena jika Anda tidak menyadari apa artinya, itu bisa berarti Anda membuang banyak waktu debugging untuk mencari tahu apa yang terjadi dan mengapa kode tidak berfungsi.
Apa artinya adalah bahwa setiap panggilan pada set hasil memodifikasi set hasil dalam objek, itu tidak dapat diterbangkan seperti di jquery di mana setiap tautan adalah set baru, Anda memiliki satu set yang merupakan hasil dari permintaan Anda dan setiap panggilan fungsi memodifikasi set tunggal itu.
untuk mendapatkan perilaku seperti jquery, Anda perlu melakukan percabangan sebelum melakukan filter / memodifikasi operasi sejenis, yang berarti akan mencerminkan apa yang terjadi di jquery lebih dekat.
$results
sekarang berisi hasil yang ditetapkan untukinput[name='forename']
TIDAK kueri asli yang sering"div p"
membuatku tersandung, apa yang saya temukan adalah bahwa QueryPath melacak filter dan menemukan dan semua yang memodifikasi hasil Anda dan menyimpannya di objek. Anda perlu melakukan ini sebagai gantinyamaka
$results
tidak akan dimodifikasi dan Anda dapat menggunakan kembali hasil yang ditetapkan berulang-ulang, mungkin seseorang dengan pengetahuan yang lebih banyak dapat menghapus ini sedikit, tetapi pada dasarnya seperti ini dari apa yang saya temukan.sumber
Advanced Html Dom adalah pengganti DOM HTML sederhana yang menawarkan antarmuka yang sama, tetapi berbasis DOM yang berarti tidak ada masalah memori terkait yang terjadi.
Ini juga memiliki dukungan CSS penuh, termasuk ekstensi jQuery .
sumber
Untuk HTML5 , lib html5 telah ditinggalkan selama bertahun-tahun sekarang. Satu-satunya perpustakaan HTML5 yang dapat saya temukan dengan catatan pembaruan dan pemeliharaan terbaru adalah html5-php yang baru saja dibawa ke beta 1.0 lebih dari seminggu yang lalu.
sumber
Saya telah menulis parser XML tujuan umum yang dapat dengan mudah menangani file GB. Ini didasarkan pada XMLReader dan sangat mudah digunakan:
Inilah repo github: XmlExtractor
sumber
Saya membuat perpustakaan bernama PHPPowertools / DOM-Query , yang memungkinkan Anda untuk menjelajah dokumen HTML5 dan XML sama seperti yang Anda lakukan dengan jQuery.
Di bawah tenda, ia menggunakan symfony / DomCrawler untuk konversi pemilih CSS ke pemilih XPath . Itu selalu menggunakan DomDocument yang sama, bahkan ketika melewati satu objek ke objek lain, untuk memastikan kinerja yang baik.
Contoh penggunaan:
Metode yang didukung:
CATATAN :
Perpustakaan juga menyertakan autoloader konfigurasi-nol sendiri untuk pustaka yang kompatibel dengan PSR-0. Contoh yang disertakan harus bekerja di luar kotak tanpa konfigurasi tambahan. Atau, Anda dapat menggunakannya dengan komposer.
sumber
Anda dapat mencoba menggunakan sesuatu seperti Tidy HTML untuk membersihkan HTML "rusak" dan mengonversi HTML ke XHTML, yang kemudian dapat diurai dengan parser XML.
sumber
Opsi lain yang dapat Anda coba adalah QueryPath . Ini terinspirasi oleh jQuery, tetapi di server dalam PHP dan digunakan di Drupal .
sumber
XML_HTMLSax
agak stabil - bahkan jika itu tidak dipertahankan lagi. Opsi lain bisa mem- pipe HTML Anda melalui Html Tidy dan kemudian menguraikannya dengan alat XML standar.sumber
The Symfony framework memiliki bundel yang dapat mengurai HTML, dan Anda dapat menggunakan CSS style untuk memilih DOM daripada menggunakan XPath .
sumber
Ada banyak cara untuk memproses HTML / XML DOM yang sebagian besar telah disebutkan. Karenanya, saya tidak akan membuat upaya untuk membuat daftar sendiri.
Saya hanya ingin menambahkan bahwa saya pribadi lebih suka menggunakan ekstensi DOM dan mengapa:
Dan sementara saya kehilangan kemampuan untuk menggunakan penyeleksi CSS
DOMDocument
, ada cara yang agak sederhana dan nyaman untuk menambahkan fitur ini: subkelasDOMDocument
dan menambahkan JS-likequerySelectorAll
danquerySelector
metode untuk subkelas Anda.Untuk mem-parsing pemilih, saya sarankan menggunakan komponen CssSelector yang sangat minimalis dari kerangka kerja Symfony . Komponen ini hanya menerjemahkan pemilih CSS ke pemilih XPath, yang kemudian dapat dimasukkan ke dalam
DOMXpath
untuk mengambil Nodelist yang sesuai.Anda kemudian dapat menggunakan subkelas (tingkat masih sangat rendah) ini sebagai dasar untuk kelas tingkat lebih tinggi, dimaksudkan untuk misalnya. parsing tipe XML yang sangat spesifik atau tambahkan lebih banyak perilaku seperti jQuery.
Kode di bawah ini langsung keluar dari perpustakaan DOM-Query saya dan menggunakan teknik yang saya jelaskan.
Untuk parsing HTML:
Lihat juga Parsing dokumen XML dengan penyeleksi CSS oleh pembuat Symfony Fabien Potencier tentang keputusannya untuk membuat komponen CssSelector untuk Symfony dan bagaimana menggunakannya.
sumber
Dengan FluidXML Anda dapat meminta dan mengulangi XML menggunakan XPath dan CSS Selectors .
https://github.com/servo-php/fluidxml
sumber
JSON dan array dari XML dalam tiga baris:
Ta da!
sumber
Ada beberapa alasan untuk tidak mem-parsing HTML dengan ekspresi reguler. Tetapi, jika Anda memiliki kontrol total terhadap HTML apa yang akan dihasilkan, maka Anda dapat melakukannya dengan ekspresi reguler sederhana.
Di atas itu adalah fungsi yang mem-parsing HTML dengan ekspresi reguler. Perhatikan bahwa fungsi ini sangat sensitif dan menuntut agar HTML mematuhi aturan tertentu, tetapi berfungsi dengan baik di banyak skenario. Jika Anda ingin parser sederhana, dan tidak ingin menginstal pustaka, coba ini:
sumber
Saya telah membuat perpustakaan bernama HTML5DOMDocument yang tersedia secara bebas di https://github.com/ivopetkov/html5-dom-document-php
Ini mendukung penyeleksi permintaan juga yang saya pikir akan sangat membantu dalam kasus Anda. Berikut ini beberapa contoh kode:
sumber
Jika Anda terbiasa dengan pemilih jQuery, Anda dapat menggunakan ScarletsQuery untuk PHP
Perpustakaan ini biasanya membutuhkan waktu kurang dari 1 detik untuk memproses html offline.
Ini juga menerima HTML yang tidak valid atau kutipan yang hilang pada atribut tag.
sumber
Metode terbaik untuk parse xml:
sumber