Bagaimana untuk menghuraikan dan memproses HTML/XML dalam PHP?
P粉838563523
P粉838563523 2023-08-23 20:18:41
0
2
529
<p>Bagaimana untuk menghuraikan HTML/XML dan mengekstrak maklumat daripadanya? </p>
P粉838563523
P粉838563523

membalas semua(2)
P粉402806175

Cuba Penghurai DOM HTML Mudah.

  • Penghuraikan DOM HTML yang ditulis dalam PHP 5+ yang membolehkan anda memanipulasi HTML dengan cara yang sangat mudah!
  • Memerlukan PHP 5+.
  • Menyokong HTML yang tidak sah.
  • Gunakan pemilih untuk mencari teg pada halaman HTML, sama seperti jQuery.
  • Ekstrak kandungan daripada HTML dalam satu baris.
  • Muat turun

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.

Contoh:

Cara mendapatkan elemen 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>';

Cara mengubah suai elemen 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;

Ekstrak kandungan daripada HTML:

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

Rebut 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);
P粉436410586

Sambungan XML asli

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

DOM mampu menghuraikan dan mengubah suai HTML dunia sebenar (rusak), ia boleh melaksanakan pertanyaan XPath 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

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.

Penghurai XML Pustaka

XML parser juga berdasarkan libxml dan melaksanakan

SAX gaya XML push parser. Ini mungkin pilihan yang lebih baik daripada DOM atau SimpleXML untuk pengurusan memori, tetapi lebih sukar untuk digunakan daripada penghurai tarik yang dilaksanakan oleh XMLReader.

SimpleXml

SimpleXML ialah pilihan apabila anda mengetahui bahawa HTML adalah XHTML yang sah. Jika anda perlu menghuraikan HTML yang rosak, jangan pertimbangkan SimpleXml kerana ia akan menyekat.

Contoh penggunaan asas

disediakan, dan terdapat banyak lagi dalam manual PHP.


Pustaka pihak ketiga (berdasarkan libxml)

Jika anda lebih suka menggunakan pustaka pihak ke-3, saya syorkan anda menggunakan DOM/libxml di bawah dan bukannya menghuraikan rentetan.

FluentDom

HtmlPageDom

phpQuery

Ini digambarkan sebagai "Perisian dan pepijat terbengkalai: gunakan atas risiko anda sendiri" tetapi nampaknya diselenggara secara minimum.

laminas-dom

fDOMDocument

sabre/xml

FluidXML


Pihak ketiga (bukan berdasarkan libxml)

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

PHP Penghurai DOM HTML Mudah

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.

Penghuraikan Html PHP

Sekali lagi, saya tidak akan mengesyorkan penghurai ini. Agak perlahan apabila penggunaan CPU tinggi. Juga tiada fungsi untuk mengosongkan ingatan 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.


HTML 5

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.

HTML5DomDocument

HTML5


Ekspresi Biasa

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, mereka 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 lengkap dan boleh dipercayai penghurai tersuai 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


Buku

Kalau nak keluarkan duit pun boleh tengok

Saya tidak bergabung dengan arkitek atau pengarang PHP.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan