资讯专栏INFORMATION COLUMN

node爬虫 抓取网页的实现

alighters / 3166人阅读

摘要:一前言一直感觉爬虫是个挺高端的东西大数据时代爬虫显得尤为重要。

一、前言

一直感觉爬虫是个挺高端的东西 大数据时代 爬虫显得尤为重要。经过一番探索,终于用node实现了这个功能,还包括对抓取内容的解析

二、正文

1、首先搭建一个http服务,这里使用我们熟悉的koa(这个是非必须的 你也可以使用纯node去抓 这里主要为了方便交互、看效果或者给非技术人员使用方便)
服务端 index.js 代码

const Koa = require("koa");
const Router = require("koa-router"); // 路由
const {greenFmt, green, purple} = require("color7log"); // log工具 

const app = new Koa();
const router = new Router();

// 默认页面
router.get("/", async (ctx, next) => {
    ctx.response.type = "html";
    ctx.response.body = fs.createReadStream("./index.html");
});

app.use(router.routes())

app.listen(3000);
green("服务已运行,端口:3000")

node index.js启动服务 即可访问你的页面了 当然项目下要有一个 index.html 内容请自己解决

2、核心代码 使用node http模块请求一个 html页面

依赖模块,请自行安装

const cheerio = require("cheerio");
const zlib = require("zlib");
const iconv = require("iconv-lite");
var http = require("http") // 引入模块

var url = "http://kaijiang.500.com/shtml/ssq/03001.shtml"

// 获取页面源码,调用方法进行解析及输出
http.get(url, function(res) {
    var html = ""
    var arr = [];
    var chunks;
    res.on("data", function(data) {
        arr.push(data);
    })

    res.on("end", function() {
        chunks = Buffer.concat(arr);
        chunks = zlib.unzipSync(chunks) // 因为页面时gzip 所以要解压 如果页面时普通文本 不需要这个
        var body = iconv.decode(chunks, "gbk");  // 转化为可见字符

        var cheerio = require("cheerio"), // 一个用法类似jq的库 node后端使用 很方便的处理各种html模板
        $ = cheerio.load(body); // 初始化dom对象
        let content = $(".iSelectList a")
        let params = []
        for (let i = 0; i < content.length; i++) {
            params.push($(content[i]).html()) // 获取每一期的编码 方便以后遍历使用
        }
        let nums = $(".ball_box01 li")
        for (let i = 0; i < nums.length; i++) {
            green($(nums[i]).html()) // 这里实现了 抓取彩票的中奖号码
        }
        
        // 把各期的编码 写入到文件 方便使用
        fs.writeFile("./data.txt", params.join(","), function(){
            console.log("完成")
        });
    })
}).on("error", function() {
    console.log("获取数据出错!")
})

看页面是不是gzip的方法如下

完整可运行代码地址 node爬虫

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106337.html

相关文章

  • 分分钟教你用node.js写个爬虫

    摘要:爬虫介绍二爬虫的分类通用网络爬虫全网爬虫爬行对象从一些种子扩充到整个,主要为门户站点搜索引擎和大型服务提供商采集数据。 分分钟教你用node.js写个爬虫 写在前面 十分感谢大家的点赞和关注。其实,这是我第一次在segmentfault上写文章。因为我也是前段时间偶然之间才开始了解和学习爬虫,而且学习node的时间也不是很长。虽然用node做过一些后端的项目,但其实在node和爬虫方面...

    fanux 评论0 收藏0
  • Python爬虫基础

    摘要:爬虫架构架构组成管理器管理待爬取的集合和已爬取的集合,传送待爬取的给网页下载器。网页下载器爬取对应的网页,存储成字符串,传送给网页解析器。从文档中获取所有文字内容正则匹配后记爬虫基础知识,至此足够,接下来,在实战中学习更高级的知识。 前言 Python非常适合用来开发网页爬虫,理由如下:1、抓取网页本身的接口相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接...

    bang590 评论0 收藏0
  • 如果有人问你爬虫抓取技术门道,请叫他来看这篇文章

    摘要:未授权的爬虫抓取程序是危害原创内容生态的一大元凶,因此要保护网站的内容,首先就要考虑如何反爬虫。反爬虫的银弹目前的反抓取机器人检查手段,最可靠的还是验证码技术。机器人协议除此之外,在爬虫抓取技术领域还有一个白道的手段,叫做协议。 本文首发于我的个人博客,同步发布于SegmentFault专栏,非商业转载请注明出处,商业转载请阅读原文链接里的法律声明。 web是一个开放的平台,这也奠定了...

    raoyi 评论0 收藏0
  • 手把手教你写带登录NodeJS爬虫+数据展示

    摘要:可以通过传入待删除数组元素组成的数组进行一次性删除。如果后台返回的为表示登录的已失效,需要重新执行。等所有的异步执行完毕后,再执行回调函数。回调函数的参数是每个函数返回数据组成的数组。 其实在早之前,就做过立马理财的销售额统计,只不过是用前端js写的,需要在首页的console调试面板里粘贴一段代码执行,点击这里。主要是通过定时爬取https://www.lmlc.com/s/web/...

    cpupro 评论0 收藏0
  • Nodejs爬虫--抓取豆瓣电影网页数据(下)

    摘要:接着上篇爬虫抓取豆瓣电影网页数据上本篇主要描述将上次抓取的数据存入数据库前提百度或谷歌的安装教程,安装本地并成功运行推荐一款数据库可视化管理工具。 接着上篇 Nodejs爬虫--抓取豆瓣电影网页数据(上) 本篇主要描述将上次抓取的数据存入mongodb数据库 前提:百度或谷歌mongodb的安装教程,安装本地并成功运行 推荐一款mongodb数据库可视化管理工具:Robomongo...

    legendaryedu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<