PhantomJS爬取信息
上次说到因为项目需要所以需要使用爬虫,经过一个下午的研究使用python写了一个非常简易的不完全爬虫。但是因为项目环境部署和工期问题,因此只好采用目前项目中使用的爬虫技术PhantomJS
尽管PhantomJS现在已经停止开发。
先进行简单的学习
https://blog.csdn.net/qq_42543244/article/details/81544469
考虑到我需要爬取的网站需要请求头,而PhantomJS
时一个无头的浏览器,因此采用casperJs
来进行处理
入门简单学习:https://www.jianshu.com/p/46b9d255cecb
当然有前端基础的可以直接读源码,对于这个理解会更加透彻。
废话不多说直接上部分代码
var casper = require('casper').create();
var fs = require('fs');
// 解决编码
phantom.outputEncoding="UTF-8";
// 航班信息查询地址
var address = "...";
var flightCode = casper.cli.get('flightCode');
// 爬取日期
var date = casper.cli.get('date');
// 爬取数据
var Data ;
casper.start(address, function() {
this.click('div[class="list"] a:nth-child(10)');
});
casper.then(function() {
if(!this.exists('#friendOrder')) {
Data = JSON.stringify({code:1, data:null, message:'网络故障,请稍候重试'})
console.log(Data);
this.exit();
} else {
this.evaluate(function(flightCode, date){
document.getElementById("friendOrder").innerText = flightCode + '-' + date;
document.getElementById("friendOrder").title = flightCode + '-' + date;
document.getElementById("byNumInput").value = flightCode;
document.getElementById("numDatepicker").value = date;
}, flightCode, date);
}
this.wait(100, function () {
this.click('input#byNumBtn');
// console.log('..........')
});
this.wait(500, function() {
casper.then(function() {
// 获取 航班列表信息
...
this.exit();
})
})
});
// casper.then(function() {
// console.log(Data);
// var callback = casper.evaluate(function(URL, Data){
// return JSON.parse(__utils__.sendAJAX(URL, 'POST', Data, false,{ contentType: "application/json" }));
// }, URL, Data);
// console.log('callback',JSON.stringify(callback));
// this.exit();
// });
casper.run();
这里解析航班列表信息的过程没有写出来,具体想尝试的同学可以自己写一下。因为信息中有部分数据时以图片形式展示,因此后续还需要结合OCR进行识别(当然在前一篇的python方式中我已经实现了结合OCR识别,只不过时本地的图片)。
我们这次处理时将图片转为base64存储起来然后在进行处理。当然如何使用java
程序调用js文件,可以百度查找。
因为爬取方案不同处理方式也会不同。当然我们这里考虑到爬取时网站响应速度,所以都加上了延迟等待。所以爬取效率不是很高。