当前位置: 首页 > news >正文

node实现网页内容的爬取

编写爬虫程序大多是后端开发者的工作,但是node的出现使得前端开发者编写爬虫程序变的可能,而且实习操作起来非常的简单。

首先介绍SuperAgent,SuperAgent是一个小型的渐进式客户端HTTP请求库,与Node.js模块具有相同的API,具有许多高级HTTP客户端功能。从这句官方解释就可以看出SuperAgent是在node环境下封装的实现http请求的库,实现网页内容的请求。

cheerio是在node环境下,能够使用像jquery api的方式获取网页dom中的数据。

这两个工具结合在一起可以抓取业务中特定的内容。我们都知道前端的网页开发中,经常将具有相同样式的dom节点用相同的class名来标记,这样可以使它们具有相同的样式,这样就可以让我们对抓取网页中特定的内容提供了方便。

我们以某网站的新闻也为例:

 

上面图中是新闻列表对应的代码,我们可以看到列表被id="xy-impcon"的div容器包裹,每个类别的新闻列表用ul,ul都有个共同class名list-a,ul下面都有li标签和a标签。如果想获取每个新闻条目我们用cheerio获取dom可以这样写$('#xy-impcon ul.list-a li a'),那么我们就来编写爬取链接和标题程序,并且将爬取的数据保存成文件。

var http = require("http"),
    url = require("url"),
    superagent = require("superagent"),
    cheerio = require("cheerio"),
    async = require("async"),
    eventproxy = require('eventproxy');
var path = require('path');
var $ = require('jQuery');
var fs = require("fs");
var writerStream2 = fs.createWriteStream(path.resolve(__dirname,'../data/news.txt'),{ flags: 'w',encoding: null,mode: 0666 });

var text = [];
(function (){
    superagent.get('爬取网站的url')
        .end(function(err,pres){
        var $ = cheerio.load(pres.text);
        var curPageUrls = $('#xy-impcon ul.list-a li a');
        console.log(curPageUrls.length)
        curPageUrls.each(function(index, elem){
            text.push({
                title: $(elem).text(),
                url: $(elem).attr('href')
            })
        })
        writerStream2.write(JSON.stringify(text),'UTF8');
  });
})();

  上面的代码就把爬取的内容都保存成了文件。

除此之外我们还可以使用phantomjs的webpage模块在node环境模拟浏览器端爬取网页数据,生成网页的截图。之后介绍具体用法

 

转载于:https://www.cnblogs.com/leejay6567/p/9163099.html

相关文章:

  • ActiveMQ:Exception occurred while processing this request, check the log for more information!
  • Selenium
  • go语言之行--简介与环境搭建
  • hive界面工具SQL Developer的安装;使用sql developer连接hive;使用sql developer连接mysql...
  • linux服务器性能查看
  • C# ASP.NET MVC 配置允许跨域访问
  • 运算符基础知识——比较运算符
  • node升级后,项目中的node-sass报错的问题
  • Mongodb数据库连接
  • ROS常用工具
  • Java基础随笔2
  • python3练习100题——026
  • Nodejs学习笔记(七)—Node.js + Express 构建网站简单示例
  • 求最短路径(Bellman-Ford算法与Dijkstra算法)
  • 49. Group Anagrams - LeetCode
  • [笔记] php常见简单功能及函数
  • 2019.2.20 c++ 知识梳理
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Python学习之路13-记分
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Web设计流程优化:网页效果图设计新思路
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 基于游标的分页接口实现
  • 开源地图数据可视化库——mapnik
  • 聊聊sentinel的DegradeSlot
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 中文输入法与React文本输入框的问题与解决方案
  • 2017年360最后一道编程题
  • 从如何停掉 Promise 链说起
  • #pragma 指令
  • (八)Flask之app.route装饰器函数的参数
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)Mysql的优化设置
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ***详解账号泄露:全球约1亿用户已泄露
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 成都线下面基会拉开序幕
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net和php怎么连接,php和apache之间如何连接
  • @property python知乎_Python3基础之:property
  • @Responsebody与@RequestBody
  • [ 第一章] JavaScript 简史
  • [] 与 [[]], -gt 与 > 的比较
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [Angularjs]ng-select和ng-options
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C++]类和对象【下】
  • [CTSC2014]企鹅QQ