mata teras
cheerio
request
melaksanakan subset jQuery yang boleh membina dan menghuraikan dom dari rentetan HTML, tetapi sukar untuk menangani HTML yang tidak berstruktur. cheerio
dan request
cheerio
Crawler Web adalah perisian yang mengakses halaman web dan mengekstrak data dari mereka. Oleh kerana isu -isu seperti pertindihan kandungan, Web merangkak adalah topik yang agak kontroversial. Kebanyakan pemilik laman web lebih suka mengakses data mereka melalui API yang tersedia secara umum. Malangnya, banyak laman web menawarkan kualiti API yang lemah dan tidak ada API sama sekali. Ini memaksa ramai pemaju untuk beralih ke web merangkak. Artikel ini akan mengajar anda cara melaksanakan crawler web anda sendiri di Node.js. Langkah pertama dalam merangkak web adalah untuk memuat turun kod sumber dari pelayan jauh. Dalam "Membuat Permintaan HTTP di Node.js", pembaca belajar bagaimana menggunakan halaman muat turun modul
request
Langkah kedua di Web Crawling, yang juga merupakan langkah yang lebih sukar, adalah untuk mengekstrak data dari kod sumber yang dimuat turun. Di sisi pelanggan, tugas ini dapat dicapai dengan mudah menggunakan perpustakaan seperti API pemilih atau jQuery. Malangnya, penyelesaian ini bergantung kepada andaian bahawa DOM boleh ditanya. Malangnya, Node.js tidak menyediakan DOM. Atau adakah ada?
var request = require("request"); request({ uri: "http://www.sitepoint.com", }, function(error, response, body) { console.log(body); });
Modul Cheerio
Walaupun node.js tidak mempunyai DOM terbina dalam, terdapat beberapa modul yang boleh membina DOM dari rentetan kod sumber HTML. Dua modul DOM yang popular adalah dan
. Artikel ini memberi tumpuan kepada, yang boleh dipasang menggunakan arahan berikut: cheerio
jsdom
Modul cheerio
npm install cheerio
. Contoh berikut menunjukkan cara menghuraikan rentetan HTML menggunakan cheerio
. Baris pertama akan mengimport cheerio
ke dalam program. cheerio
Pembolehubah menjimatkan serpihan HTML untuk dihuraikan. Pada baris 3, HTML HTML menggunakan cheerio
. Hasilnya diberikan kepada pembolehubah cheerio
. Tanda dolar dipilih kerana ia secara tradisinya digunakan dalam jQuery. Baris 4 menggunakan pemilih gaya CSS untuk memilih elemen <code>html
. Akhirnya, gunakan kaedah cheerio
untuk mencetak HTML dalaman senarai. $
var request = require("request"); request({ uri: "http://www.sitepoint.com", }, function(error, response, body) { console.log(body); });
berada di bawah pembangunan aktif dan sentiasa bertambah baik. Walau bagaimanapun, ia masih mempunyai beberapa batasan. cheerio
Aspek yang paling mengecewakan ialah parser HTML. Parsing HTML adalah masalah yang sukar, dan terdapat banyak laman web yang mengandungi HTML yang buruk. Walaupun cheerio
tidak akan terhempas di halaman ini, anda mungkin mendapati diri anda tidak dapat memilih elemen. Ini menjadikan sukar untuk menentukan sama ada ralat adalah pemilih atau halaman itu sendiri. cheerio
Crawl Jspro
Contoh berikut menggabungkan dan request
untuk membina crawler web yang lengkap. Contoh crawler ini mengekstrak tajuk dan URL semua artikel di laman utama JSPRO. Dua baris pertama mengimport modul yang diperlukan ke dalam contoh. Muat turun kod sumber laman utama JSPRO dari baris 3 hingga 5. Kemudian lulus kod sumber ke cheerio
untuk parsing. cheerio
npm install cheerio
dengan kelas entry-title
. Pemilih dalam baris 7 memilih semua pautan artikel. Kemudian gunakan fungsi <a></a>
untuk melangkah melalui semua artikel. Akhirnya, tajuk artikel dan URL diperolehi dari teks pautan dan each()
sifat, masing -masing. href
Kesimpulan
Artikel ini menunjukkan kepada anda cara membuat crawler web yang mudah di Node.js. Perhatikan bahawa ini bukan satu -satunya cara untuk merangkak halaman web. Terdapat teknologi lain, seperti menggunakan pelayar tanpa kepala, yang lebih berkuasa tetapi boleh menjejaskan kesederhanaan dan/atau kelajuan. Sila ikuti artikel yang akan datang mengenai penyemak imbas tanpa kepala Phantomjs.
node.js Web Crawling FAQ (FAQ)
Bagaimana menangani kandungan dinamik dalam merangkak web Node.js?Bagaimana untuk mengelakkan diharamkan apabila merangkak laman web?
Bagaimana untuk merangkak data dari laman web yang anda perlukan untuk log masuk?
Bagaimana untuk menyimpan data merangkak ke pangkalan data?
Untuk merangkak data dari laman web dengan paging, anda boleh menggunakan gelung untuk melayari halaman. Dalam setiap lelaran, anda boleh merangkak data dari halaman semasa dan klik butang halaman seterusnya untuk menavigasi ke halaman seterusnya.
Untuk merangkak data dari laman web dengan menatal tak terhingga, anda boleh menggunakan dalang untuk mensimulasikan menatal ke bawah. Anda boleh menggunakan gelung untuk menatal ke bawah secara berterusan sehingga data baru tidak lagi dimuatkan.
Pengendalian ralat adalah penting dalam merangkak web. Anda boleh menggunakan blok percubaan untuk mengendalikan kesilapan. Di blok tangkapan, anda boleh log mesej ralat, yang akan membantu anda menyahpepijat masalah.
untuk merangkak data dari laman web yang menggunakan Ajax, anda boleh menggunakan dalang. Puppeteer boleh menunggu panggilan Ajax diselesaikan dan kemudian ambil data.
Untuk mempercepatkan web merangkak, anda boleh menggunakan teknik seperti pemprosesan selari untuk membuka beberapa halaman dalam tab yang berbeza dan ambil data dari mereka pada masa yang sama. Walau bagaimanapun, berhati -hati untuk tidak membebankan laman web dengan terlalu banyak permintaan kerana ini boleh menyebabkan IP anda diharamkan.
merangkak data dari laman web yang menggunakan CAPTCHA boleh mencabar. Anda boleh menggunakan perkhidmatan seperti 2Captcha, yang menyediakan API untuk menyelesaikan Captcha. Walau bagaimanapun, ingat bahawa dalam beberapa kes, ini boleh menjadi haram atau tidak bermoral. Sentiasa menghormati syarat perkhidmatan laman web.
Atas ialah kandungan terperinci Mengikis web di node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!