js 爬虫抓取网页数据(网络爬虫系统的分类及分类 )
优采云 发布时间: 2021-12-22 04:03js 爬虫抓取网页数据(网络爬虫系统的分类及分类
)
前言
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。其他不太常用的名称包括蚂蚁、自动索引、模拟器或蠕虫。
我们可以利用网络爬虫来自动采集数据信息,比如在搜索引擎收录中抓取网站,以及数据分析挖掘采集,应用采集对金融数据进行在财务分析中。此外,网络爬虫还可以应用于舆情监测分析、目标*敏*感*词*采集等各个领域。
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)。表面网页是指可以被传统搜索引擎索引的网页,主要由可以通过超链接访问的静态网页组成。深网是一种大部分内容无法通过静态链接获取而隐藏在搜索表单后面的网页。只有用户提交一些关键词来获取网页。
2、创建一个简单的爬虫应用
简单了解了上面的爬虫之后,我们来实现一个简单的爬虫应用。
2.1、 达成目标
说到爬虫,大概率会想到大数据,因此也会想到Python。百度如下。Python做爬虫更多。由于我主要是做前端开发,相对来说,JavaScript 比较熟练,也比较简单。实现一个小目标,使用NodeJS爬取博客园的首页文章列表(你经常使用的一个开发者网站),然后写入本地JSON文件。
2.2、环境建设
NodeJS安装完成后,打开命令行,可以使用node -v检查NodeJS是否安装成功,npm -v检查NodeJS是否安装成功。如果安装成功,应打印如下信息(视版本而定):
2.3、 具体实现
2.3.1、安装依赖包
在目录下执行 npm install superagentcheerio --save-dev 安装superagent和cheerio依赖。创建一个 crawler.js 文件。
// 导入依赖包
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 文件。打开文件如下: