zoukankan      html  css  js  c++  java
  • PhantomJS初探

    最近想写一个程序爬网页接口的数据,由于本人是前端开发者,对于后端的一些爬虫工具不甚了解。首先所爬接口需要动态的在url加query参数,爬取数据。其次为了防止接口被封我初步设想希望能后定时爬取接口,比如间隔500ms爬取一条数据,而且每天爬取一次。开始我是开发一个网页,每天打开里面的js脚本自动执行请求接口,然后将请求的接口数据保存到后台mysql数据库中。这种方法需要人工每天打开网页进行爬取。于是翻阅资料了解phantomjs可以实现我想要的功能。

    正常的网页我们需要浏览器打开才能访问,但是通过phontomjs的虚拟浏览器环境可以在后端打开一个网页,可以正常的执行js,生成dom。这样就可以在后端打开一个网页,并且使用pm2守护进程,保持网页一直打开,在网页js中设置定时器,每天固定时间出发爬取动作。

    var page = require('webpage').create(),
        system = require('system'),
        address;
    address = system.args[1];
    var url = 'http://*******';
     
    //init and settings
    page.settings.resourceTimeout = 30000 ;
    page.settings.XSSAuditingEnabled = true ;
    //page.viewportSize = {  1000, height: 1000 };
    page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
    page.customHeaders = {
        "Connection" : "keep-alive",
        "Cache-Control" : "max-age=0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8,en;q=0.6",
    };
    page.open(url, function() {
      console.log(url);
      console.log('begin');
    });
    //加载页面完毕运行
    page.onLoadFinished = function(status) {
      console.log('Status: ' + status);
      console.log(page.content);
      //phantom.exit();
    };
    

      如上代码,webpage是phantomjs的核心模块,他可以模拟浏览器打开网页的动作,比如page.setting.userAgent可以设置ua,page.setting.customHeader可以模拟浏览器的请求头部参数,page.open是请求网页,page.onLoadFinished 是网页加载完成的回调函数。

    pnontomjs还可以做很多其他的工作。比如网页截图,可以将目标网站的网页整个ui截图保存本地。抓取网页的图片。最重要的是可以用来分析网页的性能,因为它可以监听网页不同的状态,提供相应的回调函数,例如 page.onInitialized,page.onLoadStarted,page.onLoadFinished等监听网页状态的回调函数,可以通过在这些回调函数中埋点,记录时间,就可以用来分析网页的性能。

  • 相关阅读:
    Linux:备份
    在 Cordova/Phonegap for Android 中包含中文文件名的页面
    jQuery插件开发
    为Google Reader守夜。。。
    冒泡排序
    无题六月
    XXX读后感
    KL25的AD采集操作
    工作流--JBPM简介及开发环境搭建
    内存错误:CRT detected that the application wrote to memory after end of heap buffer
  • 原文地址:https://www.cnblogs.com/leejay6567/p/9280440.html
Copyright © 2011-2022 走看看