PhantomJS爬取信息

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文件,可以百度查找。

因为爬取方案不同处理方式也会不同。当然我们这里考虑到爬取时网站响应速度,所以都加上了延迟等待。所以爬取效率不是很高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值