js 爬虫抓取网页数据( 网络爬虫(DeepWebCrawler),加以简单的介绍. )

优采云 发布时间: 2022-03-10 07:20

  js 爬虫抓取网页数据(

网络爬虫(DeepWebCrawler),加以简单的介绍.

)

  使用 Node.JS 实现一个小型网络爬虫应用程序

  前言

  网络爬虫(也称为网络蜘蛛、网络机器人,或者在 FOAF 社区中更常见的称为网络追逐者)是一种程序或脚本,它根据某些规则自动从万维网上爬取信息。其他不太常见 使用的其他名称有 ant、autoindex、emulator 或 worm。

  我们可以利用网络爬虫对数据信息进行自动化采集,如搜索引擎中的站点爬取收录、数据分析挖掘采集、金融数据采集在此外,网络爬虫还可用于舆情监测分析、目标*敏*感*词*采集等各个领域。

  1、网络爬虫分类

  网络爬虫根据系统结构和实现技术大致可以分为以下几种:通用网络爬虫、聚焦网络爬虫、增量网络爬虫、深度网络爬虫(Deep Web Crawler)。实际的网络爬虫系统通常是通过结合几种爬虫技术来实现的。下面简单介绍一下这几种爬虫。

  1.1、通用网络爬虫

  也称为Scalable Web Crawler,爬取对象从一些*敏*感*词*URL扩展到整个Web,主要用于门户网站搜索引擎和大型Web服务提供商采集数据。

  1.2、专注于网络爬虫

  也称为Topical Crawler,它指的是一种网络爬虫,它可以选择性地爬取那些与预定义主题相关的页面。与通用网络爬虫相比,专注爬虫只需要爬取主题相关的页面,大大节省了由于硬件和网络资源不足,保存的页面也因数量少而更新快,也能很好的满足某些特定人群对特定领域信息的需求。

  1.3、增量网络爬虫

  指对下载的网页进行增量更新的爬虫,只爬取新生成或更改的网页。可以在一定程度上保证爬取的页面尽可能的新。

  1.4、深网爬虫

  网页可分为表层网页(Surface Web)和深层网页(Deep Web,也称为Invisible Web Pages或Hidden Web)。表面网页是指可以被传统搜索引擎索引的页面,可以通过超链接到达的静态网页 网页主要由网页组成。Deep Web是那些大部分内容无法通过静态链接获取,隐藏在搜索表单后面,只能通过用户提交一些关键词获取的网页。

  2、创建一个简单的爬虫应用

  简单了解以上爬虫后,我们来实现一个简单的爬虫应用。

  2.1、达成目标

  说到爬虫,你可能会想到大数据,然后就会想到 Python。百度之后,Python中的爬虫确实多了。由于你主要从事前端开发,所以 JavaScript 相对来说更加熟练和简单。实现一个小目标,然后用Node.JS爬取Blog Park的首页文章列表(我常用的一个开发者网站),然后写入本地JSON文件。

  2.2、环境设置

  Node.JS:电脑需要安装Node.JS,如果没有安装,去官网下载安装。

  NPM:Node.JS 包管理工具,随 Node.JS 一起安装。

  Node.JS安装好后,打开命令行,可以使用node -v查看Node.JS是否安装成功,可以使用nPM -v查看Node.JS是否安装成功,应该打印如下信息如果安装成功(因版本不同而异):

  

  2.3、具体实现

  2.3.1、安装依赖

  在目录下执行 nPM install superagentcheerio --save-dev 安装superagent、cheerio这两个依赖。创建一个 crawler.JS 文件。

  superagent:SuperAgent 是一个轻量级、灵活、易读、学习曲线低的客户端请求代理模块,用于 Node.JS 环境。

  Cheerio:是为服务器设计的核心 jQuery 的快速、灵活和精简的实现。它可以像 jQuery 一样操作字符串。

  // 导入依赖包const http = require("http");const path = require("path");const url = require("url");const fs = require("fs");const superagent = require("superagent");const cheerio = require("cheerio");

  2.3.2、抓取数据

  然后获取请求页面,获取页面内容后,根据你想要的数据解析返回的DOM,最后将处理后的结果JSON转成字符串保存在本地。

  // 爬取页面地址const pageUrl="https://www.cnblogs.com/";// 解码字符串function unescapeString(str){ if(!str){ return '' }else{ return unescape(str.replace(/&#x/g,'%u').replace(/;/g,'')); }}// 抓取数据function fetchData(){ console.log('爬取数据时间节点:',new Date()); superagent.get(pageUrl).end((error,response)=>{ // 页面文档数据 let content=response.text; if(content){ console.log('获取数据成功'); } // 定义一个空数组来接收数据 let result=[]; let $=cheerio.load(content); let postList=$("#main #post_list .post_item"); postList.each((index,value)=>{ let titleLnk=$(value).find('a.titlelnk'); let itemFoot=$(value).find('.post_item_foot'); let title=titleLnk.html(); // 标题 let href=titleLnk.attr('href'); // 链接 let author=itemFoot.find('a.lightblue').HTML(); // 作者 let headLogo=$(value).find('.post_item_summary a img').attr('src'); // 头像 let summary=$(value).find('.post_item_summary').text(); // 简介 let postedTime=itemFoot.text().split('发布于')[1].substr(0,16); // 发布时间 let readNum=itemFoot.text().split('阅读')[1]; // 阅读量 readNum=readNum.substr(1,readNum.length-1); title=unescapeString(title); href=unescapeString(href); author=unescapeString(author); headLogo=unescapeString(headLogo); summary=unescapeString(summary); postedTime=unescapeString(postedTime); readNum=unescapeString(readNum); result.push({ index, title, href, author, headLogo, summary, postedTime, readNum }); }); // 数组转换为字符串 result=JSON.stringify(result); // 写入本地 cnblogs.JSON 文件中 fs.writeFile("cnblogs.json",result,"utf-8",(err)=>{ // *敏*感*词*错误, 如正常输出, 则打印 null if(!err){ console.log('写入数据成功'); } }); });}fetchData();

  3、执行优化

  3.1,生成结果

  在项目目录下打开命令行,输入node crawler.JS,

  

  你会发现目录下会创建一个cnblogs.JSON文件,打开文件如下:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线