Mengikis Halaman dengan Kandungan Dinamik Menggunakan Node.js
Untuk pengikis web, kandungan dinamik boleh menimbulkan cabaran. Satu contoh sedemikian ialah apabila elemen halaman dibuat selepas halaman awal dimuatkan. Dalam senario sedemikian, kaedah mengikis standard mungkin tidak mencukupi.
Pertimbangkan isu ini apabila menggunakan cheerio dalam Node.js. Kod berikut cuba mengikis elemen dari halaman, tetapi elemen dinamik tidak hadir apabila pemuatan cheerio berlaku:
var request = require('request'); var cheerio = require('cheerio'); var url = "http://www.bdtong.co.kr/index.php?c_category=C02"; request(url, function (err, res, html) { var $ = cheerio.load(html); $('.listMain > li').each(function () { console.log($(this).find('a').attr('href')); }); });
Kod ini selalunya mengembalikan respons kosong kerana elemen belum hadir dalam halaman HTML apabila cheerio dimuatkan. Jadi, bagaimanakah kita boleh mendapatkan semula elemen ini menggunakan Node.js?
Penyelesaian: Menggunakan PhantomJS
Untuk mengendalikan kandungan dinamik, kami boleh menggunakan PhantomJS, pelayar web tanpa kepala yang boleh melaksanakan JavaScript. PhantomJS membolehkan kami mensimulasikan pelayar yang berinteraksi dengan halaman dan mendapatkan semula elemen apabila ia tersedia. Berikut ialah contoh menggunakan PhantomJS:
var phantom = require('phantom'); phantom.create(function (ph) { ph.createPage(function (page) { var url = "http://www.bdtong.co.kr/index.php?c_category=C02"; page.open(url, function() { page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { page.evaluate(function() { $('.listMain > li').each(function () { console.log($(this).find('a').attr('href')); }); }, function(){ ph.exit() }); }); }); }); });
Dalam kod ini, kami mula-mula memasukkan jQuery ke dalam halaman menggunakan PhantomJS, membolehkan kami berinteraksi dengan elemen secara dinamik. Kami kemudian menilai kod JavaScript yang log atribut href elemen ke konsol.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengikis Kandungan Halaman Web Dinamik Menggunakan Node.js?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!