Rumah > Soal Jawab > teks badan
Bagaimana untuk menghuraikan HTML/XML dan mengekstrak maklumat daripadanya?
P粉5205457532023-10-13 00:52:20
Cuba Penghurai DOM HTML Mudah.
Nota: Seperti namanya, ia berguna untuk tugasan mudah. Ia menggunakan ungkapan biasa dan bukannya penghurai HTML, jadi ia akan menjadi lebih perlahan untuk tugas yang lebih kompleks. Kebanyakan pangkalan kodnya ditulis pada tahun 2008, dengan hanya penambahbaikan kecil dibuat sejak itu. Ia tidak mengikut piawaian pengekodan PHP moden dan sukar untuk dimasukkan ke dalam projek yang mematuhi PSR moden.
// 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 . '
'; // Find all links foreach($html->find('a') as $element) echo $element->href . '
';
// Create DOM from string $html = str_get_html('HelloWorld'); $html->find('div', 1)->class = 'bar'; $html->find('div[id=hello]', 0)->innertext = 'foo'; echo $html;
// Dump contents (without tags) from HTML echo file_get_html('http://www.google.com/')->plaintext;
// 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);
P粉6198961452023-10-13 00:47:49
Saya lebih suka menggunakan salah satu daripada sambungan XML asli kerana ia berfungsi dengan PHP secara amnya lebih pantas daripada semua perpustakaan pihak ketiga dan memberi saya semua kawalan yang saya perlukan ke atas penanda.
DOM mampu menghuraikan dan mengubah suai HTML dunia sebenar (rusak), ia boleh melaksanakan pertanyaan XPath< /a> Ia berdasarkan libxml.
Bekerja dengan DOM mengambil sedikit masa untuk menjadi produktif, tetapi pada pendapat saya, masa itu berbaloi. Memandangkan DOM ialah antara muka neutral bahasa, anda akan menemui pelaksanaan dalam berbilang bahasa, jadi jika anda perlu menukar bahasa pengaturcaraan, kemungkinan besar anda sudah tahu cara menggunakan API DOM bahasa tersebut.
Cara menggunakan sambungan DOM telah dibincangkan secara meluas pada StackOverflow, jadi jika dan apabila anda memilih untuk menggunakannya, anda boleh yakin bahawa kebanyakan masalah yang anda hadapi boleh diselesaikan dengan mencari/menyemak imbas Stack Overflow.
Contoh penggunaan asasdan Ikhtisar konsep amboleh didapati dalam jawapan lain.
XMLReader, seperti DOM, adalah berdasarkan libxml. Saya tidak tahu cara untuk mencetuskan modul penghurai HTML, jadi menggunakan XMLReader untuk menghuraikan HTML yang rosak mungkin tidak sekuat menggunakan DOM, di mana anda boleh secara jelas memberitahunya untuk menggunakan modul penghurai HTML libxml.
Contoh penggunaan asas disediakan dalam jawapan lain.
Contoh penggunaan asas
disediakan, dan terdapat banyak lagi dalam manual PHP. Jika anda lebih suka menggunakan pustaka pihak ke-3, saya syorkan anda menggunakan DOM/libxml di bawah dan bukannya menghuraikan rentetan. Ini digambarkan sebagai "Perisian dan pepijat terbengkalai: gunakan atas risiko anda sendiri" tetapi nampaknya diselenggara secara minimum. Faedah membina pada DOM/libxml ialah anda mendapat prestasi yang baik di luar kotak kerana anda membina sambungan asli. Walau bagaimanapun, tidak semua perpustakaan pihak ketiga melalui laluan ini. Sebahagian daripada mereka disenaraikan di bawah Saya secara amnya tidak mengesyorkan penghurai ini. Asas kod adalah mengerikan dan penghurai itu sendiri agak perlahan dan intensif memori. Tidak semua pemilih jQuery (seperti sub-pemilih) boleh dilakukan. Mana-mana perpustakaan berasaskan libxml harus dengan mudah mengatasi ini. Sekali lagi, saya tidak akan mengesyorkan penghurai ini. Agak perlahan apabila penggunaan CPU tinggi. Juga tiada fungsi untuk mengosongkan memori objek DOM yang dicipta. Masalah ini amat teruk dalam gelung bersarang. Dokumen itu sendiri tidak tepat dan mengandungi salah ejaan dan tiada respons pembetulan sejak 14 April 2016. Anda boleh menggunakan perkara di atas untuk menghuraikan HTML5, tetapi beberapa perkara pelik mungkin berlaku disebabkan oleh markup yang dibenarkan oleh HTML5. Oleh itu, untuk HTML5 anda mungkin ingin mempertimbangkan untuk menggunakan penghurai khusus. Ambil perhatian bahawa ini ditulis dalam PHP, jadi prestasi akan menjadi lebih perlahan dan penggunaan memori meningkat berbanding sambungan yang disusun dengan bahasa peringkat rendah. Terakhir dan paling tidak disyorkan, anda boleh menggunakan ungkapan biasauntuk mengekstrak data daripada HTML a >. Secara umum, penggunaan ungkapan biasa pada HTML adalah tidak digalakkan. Kebanyakan coretan kod yang anda temui di web untuk pemadanan teg adalah rapuh. Dalam kebanyakan kes, ia hanya berfungsi dengan coretan HTML yang sangat khusus. Perubahan markup kecil (seperti menambah ruang di suatu tempat, atau menambah atau menukar atribut dalam markup) boleh menyebabkan ungkapan biasa gagal apabila ditulis dengan salah. Sebelum menggunakan RegEx pada HTML, anda harus tahu apa yang anda lakukan. Penghurai HTML sudah mengetahui peraturan sintaks HTML. Ungkapan biasa mesti diajar untuk setiap ungkapan biasa baharu yang anda tulis. Ungkapan biasa adalah baik dalam beberapa kes, tetapi ia benar-benar bergantung pada kes penggunaan anda. Anda boleh menulis penghurai yang lebih dipercayai , tetapi menulis penghurai tersuai lengkap dan boleh dipercayai menggunakan ungkapan biasa adalah membuang masa apabila perpustakaan di atas sudah wujud dan melakukan kerja yang lebih baik dalam hal ini. Lihat jugaCthulhu Way Analysis Html< /a> Kalau nak keluarkan duit boleh tengok Saya tidak bergabung dengan arkitek atau pengarang PHP.
Pustaka pihak ketiga (berdasarkan libxml)
FluentDom
HtmlPageDom
phpQuery
laminas-dom
fDOMDocument
sabre/xml
FluidXML
Pihak ketiga (bukan berdasarkan libxml)
PHP Penghurai DOM HTML Mudah
Penghuraikan Html PHP
HTML 5
HTML5DomDocument
HTML5
Ekspresi Biasa
Buku