Nodejs mendapatkan kandungan halaman web dan mengikat peristiwa data Data yang diperoleh akan dijawab dalam beberapa kali Jika anda ingin memadankan kandungan global, anda perlu menunggu permintaan untuk menamatkan dan mengendalikan data global terkumpul dalam acara akhirnya!
Sebagai contoh, jika anda ingin mencari jika terdapat www.baidu.com pada halaman, saya tidak akan memberitahu lebih lanjut, cuma letakkan kod:
//引入模块 var http = require("http"), fs = require('fs'), url = require('url'); //写入文件,把结果写入不同的文件 var writeRes = function(p, r) { fs.appendFile(p , r, function(err) { if(err) console.log(err); else console.log(r); }); }, //发请求,并验证内容,把结果写入文件 postHttp = function(arr, num) { console.log('第'+num+"条!") var a = arr[num].split(" - "); if(!a[0] || !a[1]) { return; } var address = url.parse(a[1]), options = { host : address.host, path: address.path, hostname : address.hostname, method: 'GET', headers: { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36' } } var req = http.request(options, function(res) { if (res.statusCode == 200) { res.setEncoding('UTF-8'); var data = ''; res.on('data', function (rd) { data += rd; }); res.on('end', function(q) { if(!~data.indexOf("www.baidu.com")) { return writeRes('./no2.txt', a[0] + '--' + a[1] + '\n'); } else { return writeRes('./has2.txt', a[0] + '--' + a[1] + "\n"); } }) } else { writeRes('./error2.txt', a[0] + '--' + a[1] + '--' + res.statusCode + '\n'); } }); req.on('error', function(e) { writeRes('./error2.txt', a[0] + '--' + a[1] + '--' + e + '\n'); }) req.end(); }, //读取文件,获取需要抓取的页面 openFile = function(path, coding) { fs.readFile(path, coding, function(err, data) { var res = data.split("\n"); for (var i = 0, rl = res.length; i < rl; i++) { if(!res[i]) continue; postHttp(res, i); }; }) }; openFile('./sites.log', 'utf-8');
Anda boleh memahami kod di atas Jika anda mempunyai sebarang soalan yang tidak jelas, sila tinggalkan mesej kepada saya.
Yang berikut akan memperkenalkan kepada anda keupayaan Nodejs untuk merangkak halaman web
PHP pertama. Mari kita bincangkan tentang kelebihan dahulu: terdapat banyak rangka kerja untuk merangkak dan menghuraikan HTML dalam talian, dan anda hanya boleh menggunakan pelbagai alatan secara langsung, yang lebih bebas daripada kebimbangan. Kelemahan: Pertama sekali, kelajuan/kecekapan adalah masalah Sekali apabila saya memuat turun poster filem, crontab telah dilaksanakan secara berkala dan tiada pengoptimuman dilakukan. Terdapat terlalu banyak proses PHP yang dibuka, yang secara langsung mengatasi memori. Kemudian tatabahasa juga sangat perlahan Terdapat terlalu banyak kata kunci dan simbol, dan ia tidak cukup ringkas Ia memberi orang perasaan bahawa ia tidak direka dengan teliti, dan ia sangat menyusahkan untuk menulis.
Node.js. Kelebihannya ialah kecekapan, kecekapan dan kecekapan Memandangkan rangkaian tidak segerak, ia pada asasnya sama kuatnya dengan ratusan proses serentak Memori dan penggunaan CPU adalah sangat kecil kesesakan sistem Ia pada asasnya bergantung pada lebar jalur dan kelajuan I/O menulis ke pangkalan data seperti MySQL. Sudah tentu, sebaliknya daripada kelebihan itu juga merupakan kelemahan Rangkaian tak segerak bermakna anda memerlukan panggilan balik Pada masa ini, jika permintaan perniagaan adalah linear, sebagai contoh, anda mesti menunggu untuk selesai mengambil halaman sebelumnya dan mendapatkan data sebelum. mengambil halaman seterusnya. Malah lebih banyak kebergantungan Lapisan, akan terdapat panggilan balik berbilang lapisan yang mengerikan! Pada asasnya pada masa ini, struktur dan logik kod akan menjadi kucar-kacir. Sudah tentu, anda boleh menggunakan langkah dan alat kawalan proses lain untuk menyelesaikan masalah ini.
Akhir sekali, mari bercakap tentang Python. Jika anda tidak mempunyai keperluan yang melampau untuk kecekapan, maka Python disyorkan! Pertama sekali, sintaks Python sangat ringkas, dan pernyataan yang sama boleh disimpan berkali-kali pada papan kekunci. Kemudian, Python sangat sesuai untuk pemprosesan data, seperti pembungkusan dan pembongkaran parameter fungsi, analisis senarai, dan pemprosesan matriks, yang sangat mudah.