node调用phantomjs-node爬取复杂页面

什么是phantomjs

phantomjs官网是这么说的,‘整站测试,屏幕捕获,自动翻页,网络监控’,目前比较流行用来爬取复杂的,难以通过api或正则匹配的页面,比如页面是通过异步加载。phantomjs就是一个完整的浏览器只能没有界面,因此我们可以用它来模拟真正的浏览器去访问页面,然后再获取页面。我要说的重点是如何在node中调用phantomjs来获取页面。

node与phantomjs通信

  1. 命令行传参   只能在phantomjs开启时对其传参,运行过程中无能为力。
  2. 标准输出       能从phantomjs向node输出数据,但是没法反过来。
  3. http                 phantomjs向node发http请求,然后node返回数据,但是请求只能由phantomjs发出
  4. websocket     websocket通讯,能够双向通讯但是实现略麻烦。
  5. phantomjs-node        实际上也是使用websocket或者http通讯,但是毕竟是别人写好的我们直接用就行,缺点是依赖略庞大。

如何使用phantom-node

GitHub地址:https://github.com/amir20/phantomjs-node

这里只做简单说明详细api见github。

1.安装

npm install phantom

2.模块封装(以下代码基于es7,需支持async/await,node版本>7.0),更详细使用可查看phantomjs官方文档

 1 ‘use strict‘
 2
 3 const phantom = require(‘phantom‘);
 4
 5 let getPic = async ( name ) => {
 6     //url路径
 7     let url        = ‘http:///‘+name;
 8     //创建一个实例
 9     const instance = await phantom.create();
10     //创建一个页面
11     const page     = await instance.createPage();
12     //设置页面参数
13     await page.property( ‘viewportSize‘ , { width : 1800 , height : 1200 } );
14     //打开url,返回状态(url有转码,解决中文问题)
15     const status = await page.open( encodeURI( url ) );
16     console.log( status );
17     //延时等待页面js执行完成(phantomjs只是等待页面上全部资源加载完毕,不包含页面js执行时间,所以需延时一段时间等待js)
18     await lateTime( 500 );
19     //输出页面到当前目录下
20     await page.render(`${ name }--${Date.now()}.png`);
21     //销毁实例
22     await instance.exit();
23     //返回数据
24     return ‘xxx‘;
25 };
26
27 let lateTime = ( time ) =>{
28     return new Promise( function(resolve,reject){
29         setTimeout(function(){
30             resolve();
31         }, time );
32     } );
33 }
34 //暴露接口
35 module.exports = getPic ;
时间: 2024-08-27 20:47:16

node调用phantomjs-node爬取复杂页面的相关文章

python --selenium+phantomjs爬取动态页面广告源码

背景:利用爬虫,爬取网站页面广告元素,监控爬取元素的数目,定时发送监控邮件 #!/usr/bin/env python2.7 # -*- coding: utf-8 -*- ''' @xiayun @[email protected] #爬取网站内容,利用phantomjs:IP代理+修改UA+动态页面执行JS ''' from selenium import webdriver from selenium.webdriver.common.desired_capabilities import

爬取动态页面2

动态页面的爬取思路: 1.  ajax  -----数据放在 json 中,在里面是否有url 2.  js  数据   通过    搜索原页面上的数据关键字    :ctrl + f   , 全局搜索关键字 例子: 开始网站  url = 'https://www.xuexi.cn/' 爬取的页面1: url 1= 'https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.ht

Node 爬虫,批量爬取头条视频并保存

项目地址:GitHub 目标网站:西瓜视频项目功能:下载头条号[维辰财经]下的最新20个视频姊妹项目:批量下载美女图集 简介 一般批量爬取视频或者图片的套路是,使用爬虫获得文件链接集合,然后通过 writeFile 等方法逐个保存文件.然而,头条的视频,在需要爬取的 html 文件(服务端渲染输出)中,无法捕捉视频链接.视频链接是页面在客户端渲染时,通过某些 js 文件内的算法或者解密方法,根据视频的已知 key 或者 hash 值,动态计算出来并添加到 video 标签的.这也是网站的一种反爬

[爬虫]采用Go语言爬取天猫页面

最近工作中有一个需求,需要爬取天猫商品的信息,整个需求的过程如下: 修改后端广告交易平台的代码,从阿里上传的素材中解析url,该url格式如下: https://handycam.alicdn.com/slideshow/26/7ef5aed1e3c39843e8feac816a436ecf.mp4?content=%7B%22items%22%3A%5B%7B%22images%22%3A%5B%22https%3A%2F%2Fasearch.alicdn.com%2Fbao%2Fupload

python scrapy爬取动态页面

preface:最近学习工作之外,有个异性朋友需要爬取动态网页的要求,输入关键词爬取某个专利网站在该关键词下的一些专利说明.以往直接python urllib2可破,但是那只是对于静态网页可破,但是对于用js等其他的生成的动态网页的话,则貌似不行(没试过).然后在网上找了些资料,发现scrapy结合selenium包好像可以.(之所以这么说,暂时卤主也还没实现,先记录下来.) #=====================根据官网中简单的介绍作个人理解=======================

python 爬取html页面

1 #coding=utf-8 2 import urllib.request 3 4 def gethtml(url): 5 page=urllib.request.urlopen(url) 6 html=page.read().decode("utf-8") 7 8 return html 9 10 11 12 url="........" 13 14 html = gethtml(url) 15 16 17 print(html) 有些网站的页面无法全部爬取(

java实现多线程使用多个代理ip的方式爬取网页页面内容

项目的目录结构 核心源码: package cn.edu.zyt.spider; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import cn.edu.zyt.

selenium+phantomjs爬取动态页面数据

1.安装selenium pip/pip3 install selenium 注意依赖关系 2.phantomjs for windows 下载地址:http://phantomjs.org/download.html phantomjs-2.1.1-windows 仅支持64位系统 phantomjs-1.9.7-windows 支持32位系统,更早的版本没测试过 把下载好的安装包bin目录下的phantomjs.exe文件拷贝到python安装目录下的Scripts目录下 3.模拟浏览器操作

爬虫:工作中编写的一个python爬取web页面信息的小demo

最近公司要求编写一个爬虫,需要完善后续金融项目的数据,由于工作隐私,就不付被爬的网址url了,下面总结下spider的工作原理. 语言:python:工具:jupyter: (1)使用requests模块,获取url页面. import requests url = "http://www.~~~~~~~~~~~~~~~~~~~~~~~~~~" r = requests.get(url) (2)解析html页面(若是pdf页面需要其他工具模块)需要使用BeautifulSoup模块,把