zoukankan      html  css  js  c++  java
  • node:爬虫爬取网页图片

    代码地址如下:
    http://www.demodashi.com/demo/13845.html

    前言

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

    目录:

    • 安装node,并下载依赖
    • 搭建服务
    • 请求我们要爬取的页面,返回json
      安装node
      我们开始安装node,可以去node官网下载node下载地址,下载完成后运行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爬虫就完成了。希望可以到 项目node爬虫 上点一个 star 作为你对这个项目的认可与支持,谢谢。

    node:爬虫爬取网页图片

    代码地址如下:
    http://www.demodashi.com/demo/13845.html

    注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

  • 相关阅读:
    自控力和专注力是执行力的保证
    今宵又除夕
    买了小米盒子三代
    电容相位滞后?电感超前
    lcr电桥浅谈
    ad 线束和网络
    浅谈 R_S触发器
    NTSC PAL 介绍
    verilog 之流水灯
    io 口方向调整 stm32
  • 原文地址:https://www.cnblogs.com/demodashi/p/9582497.html
Copyright © 2011-2022 走看看