• node:爬虫爬取网页图片


    前言

    周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片,自己就想着作为一个码农,可以把这些图片都爬取下来做成一个微信小程序,说干就干,了解一下基本都知道怎么做了,整理分享一波给大家。

    目录

    • 安装node,并下载依赖
    • 搭建服务
    • 请求我们要爬取的页面,返回json

     

    安装node

    我们开始安装node,可以去node官网下载https://nodejs.org/zh-cn/,下载完成后运行node使用,

    node -v

    安装成功后会出现你所安装的版本号。

    接下来我们使用node, 打印出hello world,新建一个名为index.js文件输入

    console.log('hello world')

    运行这个文件

    node index.js

    就会在控制面板上输出hello world

    搭建服务器

    新建一个·名为node的文件夹。

    首先你需要下载express依赖

    npm install express 

    再新建一个名为demo.js的文件 目录结构如图:

    在demo.js引入下载的express

    const express = require('express');
    const app = express();
    app.get('/index', function(req, res) {
    res.end('111')
    })
    var server = app.listen(8081, function() {
        var host = server.address().address
        var port = server.address().port
        console.log("应用实例,访问地址为 http://%s:%s", host, port)
    
    })

    运行node demo.js简单的服务就搭起来了,如图:

    请求我们要爬取的页面

    请求我们要爬取的页面

    npm install superagent
    npm install superagent-charset
    npm install cheerio

    superagent 是用来发起请求的,是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下.,也可以使用http发起请求

    superagent-charset防止爬取下来的数据乱码,更改字符格式

    cheerio为服务器特别定制的,快速、灵活、实施的jQuery核心实现.。 安装完依赖就可以引入了

    var superagent = require('superagent');
    var charset = require('superagent-charset');
    charset(superagent);
    const cheerio = require('cheerio');

    引入之后就请求我们的地址,https://www.qqtn.com/tx/weixintx_1.html,如图:

    声明地址变量:

    const baseUrl = 'https://www.qqtn.com/'

    这些设置完之后就是发请求了,接下来请看完整代码demo.js

    var superagent = require('superagent');
    var charset = require('superagent-charset');
    charset(superagent);
    var express = require('express');
    var baseUrl = 'https://www.qqtn.com/'; //输入任何网址都可以
    const cheerio = require('cheerio');
    var app = express();
    app.get('/index', function(req, res) {
        //设置请求头
        res.header("Access-Control-Allow-Origin", "*");
        res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header('Access-Control-Allow-Headers', 'Content-Type');
        //类型
        var type = req.query.type;
        //页码
        var page = req.query.page;
        type = type || 'weixin';
        page = page || '1';
        var route = `tx/${type}tx_${page}.html`
        //网页页面信息是gb2312,所以chaeset应该为.charset('gb2312'),一般网页则为utf-8,可以直接使用.charset('utf-8')
        superagent.get(baseUrl + route)
            .charset('gb2312')
            .end(function(err, sres) {
                var items = [];
                if (err) {
                    console.log('ERR: ' + err);
                    res.json({ code: 400, msg: err, sets: items });
                    return;
                }
                var $ = cheerio.load(sres.text);
                $('div.g-main-bg ul.g-gxlist-imgbox li a').each(function(idx, element) {
                    var $element = $(element);
                    var $subElement = $element.find('img');
                    var thumbImgSrc = $subElement.attr('src');
                    items.push({
                        title: $(element).attr('title'),
                        href: $element.attr('href'),
                        thumbSrc: thumbImgSrc
                    });
                });
                res.json({ code: 200, msg: "", data: items });
            });
    });
    var server = app.listen(8081, function() {
    
        var host = server.address().address
        var port = server.address().port
    
        console.log("应用实例,访问地址为 http://%s:%s", host, port)
    
    })

    运行demo.js就会返回我们拿到的数据,如图:

    一个简单的node爬虫就完成了。希望可以到 项目上点一个 star 作为你对这个项目的认可与支持,谢谢。 

    项目地址:https://github.com/Mr-MengBo/Reptilian

  • 相关阅读:
    开发小技巧:移除不用的接口和代码
    打印维护调整整体偏移值
    设置table表格的单元格间距两种方式
    html中测试div、ul和li、table排列多个块
    LODOP常见问题连接(含常见小问答博文)
    常见问答的点击到链接1
    LODOP中打印项水平居中简短问答
    LODOP设置某打印项锁定下边距
    css选择器测试2-用ul和li简单排版
    LODOP打印超文本有边距不居中的情况2
  • 原文地址:https://www.cnblogs.com/Limengbo/p/9487999.html
Copyright © 2020-2023  润新知