Selama pemrograman atau saat menulis crawler jaringan, HTML sering kali perlu diuraikan untuk mengekstrak data yang bermanfaat. Alat yang baik sangat berguna dan dapat memberikan banyak bantuan.
Setelah menggunakannya: rasanya htmlcleaner lebih baik daripada htmlparser, terutama xpath htmlcleaner.
Mari kita buat contoh htmlcleaner.
1. Penggunaan htmlcleaner:
1. Htmlcleaner
HTMLCleaner adalah bahasa Java Source Open Source HTML Document Parser. HTMLCleaner dapat mengatur ulang setiap elemen dokumen HTML dan menghasilkan dokumen HTML dengan struktur yang baik (dibentuk dengan baik). Aturan yang diikuti secara default mirip dengan aturan yang digunakan oleh sebagian besar browser web sebagai model dokumen. Namun, pengguna dapat memberikan tag dan aturan khusus untuk penyaringan dan pencocokan.
Alamat rumah: http://htmlcleaner.sourceForge.net/
Alamat unduhan: //www.vevb.com/softs/364983.html
2. Contoh Dasar, ambil informasi bandara di Wikipedia
html-class-decmo.html
Html-clean-demo.html <! : //www.w3.org/1999/xhtml "xml: lang =" zh-cn "dir =" ltr "> <sat tinggi> <meta http-equiv =" content-sepe "content =" text/html; = gbk " /> <meta http-equiv =" konten-bahasa "content =" zh-cn " /> <itement> html clean demo </head> <body> <div class =" d_1 "> <ul> < Li> bar </li> <li> foo </li> <li> gzz </li> </ul> </div> <verv> <ul> <li> <a name = "my_href" href = " 1.html "> teks- </a> </li> <li> <a name =" my_href "href =" 2.html "> Text-2 </a> </a> </a> </a> </a> </a> a> </a> </a> </a> </a> </a> </a> </a> </a>/li> <li> <a name = "my_href" href = " 3.html "> text-3 </a> </li> <li> <a name =" my_href "href =" 4.html "> Text-4 </a> </li> </ul> < /Div> </body> </html>
Htmlcleandemo.java
paket com.chenlb; tagnode node = clear.clean (file baru ("html/html-demo.html"); "gbk"); 0) {System.out.println ("title ="+(tagnode) ns [0])); = node.evaluTexPath ("// div [@class = 'd_1']); untuk (objek pada: ns) {tagnode n = (tagNode) di; System.out.println ("/ttext = "+n.getText ();} System.out.println ("A:"); ("href")+", text ="+n.getText ());}}}
Parameter dalam cleaner.clean () dapat berupa konten file, url, dan string. Yang lebih umum digunakan harus evaluatexpath, getelementsbyattValue, GetElementsbyname Method. Selain itu, HTMLCleaner lebih kompatibel dengan HTML yang tidak teratur.
Ambil informasi bandara di Wikipedia
Impor Com.moore.util.httpclientutil;/*** menggunakan: TODO** @Author bbdtek*/kelas publik parserairport {private static logger logg = logg = logg erfactory.getLogger (parserairport.class);/** @param argsory * @Throws UNPuMuTedencingException * @throws XpatherException */public static void main (string [] args) melempar unportedencodexce ption, xPatherException {string url = "http://zh.wikipedia.org/wiki/%E4%E4%B8%B8..Ad8. %8d%8e%E4%BA%BA%E6%B0%91%E5%85%B1%E5%8C%E5%BD%E6%BA%BA%E5%BA%E5%88 88%97%E8% A1%A8 "; Isi String = httpclientutil.getil (). GetCon (url); htmlcleaner hc = htmlclener baru (); xpath =" // div [@class = 'mw-content-ltr'] // tabel [ @ @ @ @ @ Class = 'wikitable + sortable'] // tbody // tr [@align = 'right'] "objek [] objarr = null; objarr = tn .evaluatExpath (xpath); if (objarr! = Null && objarr.length> 0) {untuk (objek obj: objarr) {tagnode tntr = (tagnode) obj; OBJARRTR = TNTR.EvalUTEXPATH (XPTR); info (str);}}}}}
Kedua, penjelajahan pertama xpath
1. Pengantar XPath:
XPath adalah bahasa yang mencari informasi dalam dokumen XML. XPATH dapat digunakan untuk melintasi elemen dan atribut dalam dokumen XML.
2. Pilih XPath Node
XPath menggunakan ekspresi path untuk memilih node dalam dokumen XML. Node dipilih oleh jalur atau langkah.
Ekspresi jalur paling berguna tercantum di bawah ini:
ekspresi | menggambarkan |
---|---|
nodename | Pilih semua sub -node dari node ini. |
/ / / | Pilih dari node root. |
// | Pilih node dalam pemilihan simpul saat ini dari pemilihan simpul saat ini tanpa mempertimbangkan posisinya. |
Lalu, lalu | Pilih simpul saat ini. |
... | Pilih simpul induk dari simpul saat ini. |
@ @ | Pilih atribut. |
Beberapa ekspresi yang biasa digunakan
Ekspresi jalur | hasil |
---|---|
/Toko Buku/Buku [1] | Pilih elemen buku pertama yang dimiliki oleh sub -elemen toko buku. |
/BookStore/Book [last ()]] | Pilih elemen buku terakhir milik sub -elemen. |
/Toko Buku/Buku [terakhir () -1] | Pilih elemen buku kedua milik sub -elemen. |
/Toko Buku/Buku [Posisi () <3] | Pilih dua bagian depan elemen buku toko buku yang dimiliki oleh elemen toko buku. |
// judul [@lang] | Pilih semua elemen judul dengan atribut bernama Lang. |
// judul [@lang = 'Eng'] | Pilih semua elemen judul, dan elemen -elemen ini memiliki atribut Lang dengan ENG. |
/Toko Buku/Buku [Harga> 35.00] | Pilih semua elemen buku elemen toko buku, dan nilai elemen harga harus lebih besar dari 35,00. |
/Toko Buku/Buku [Harga> 35.00-/Judul | Pilih semua elemen judul elemen buku di elemen toko buku, dan nilai elemen harga harus lebih besar dari 35,00. |