×

一起来了解下JS里的爬虫玩法

作者:andy0012020.03.21来源:Web前端之家浏览:13497评论:0
关键词:js网络爬虫

爬虫,大多人对于爬虫的理解都停留在使用后端语言如Python写的爬虫。但是实际上,使用客户端JavaScript有诸多后端爬虫所无法拥有的优势:

  • 可以方便的分享给其他人用,只要对方电脑里有浏览器

  • 由于跑在客户端,几乎可以无视对方网站的反爬虫机制

  • 可以拥有完善的UI,无开发基础的小白也可以随意使用

1、爬虫相关的包

(1)处理get post put delete head 请求  轻量接http请求库,模仿浏览器登陆

const request =  require('superagent');

(2)加载html

const cheerio = require('cheerio');

(3)加载文件系统模块 将数据存到一个文件中的时候会用到

const fs = require('fs'); 
   fs.writeFile('saveFiles/zybl.txt', content, (error1) => { // 将文件存起来文件路径要存的内容错误             
   if (error1) throw error1;             // console.log(' text save ');       
     });

(4)将文件存为xlse

const fs      = require('graceful-fs');

新建xlsx文件      

 const writeStream = fs.createWriteStream('saveFiles/trader.xlsx');

向slsx里面写入内容

writeStream.write(title);

(5)异步处理

const Promise = require('bluebird');

(6)一个高层次的浏览器自动化图书馆  先要安装phantomjs 然后在装nightmare

const Nightmare = require('nightmare');

(7)const co = require('co');

2、爬虫代码 

'use strict';

const co = require('co');
const fs = require('fs');
const Nightmare = require('nightmare'); // 可视化的浏览器
const url = 'http://sports.qq.com/isocce/';

const onError = function(err) {
    console.log(err);
};

const getHtml = function(pageUrl) {
    const pageScraper = new Nightmare(); // 打开浏览器
    let content = null;

    return co(function * run() {
        yield pageScraper.goto(pageUrl.url).wait();
        console.log('222222' + pageUrl.url);
        content = yield pageScraper.evaluate(() = >{
            const temp = document.querySelector('body').innerHTML;
            return temp;
        });
        console.log('子页面链接');
        console.dir(content);

        yield fs.writeFile('../../saveFiles/' + pageUrl.title + '.html', content, (err) = >{
            console.log('存文件.......');
            if (err) return console.log(err);
            return console.log('Save pageUrl content to ' + pageUrl.title + '.html');
        });
    });
};

co(function * run() {
    const scraper = new Nightmare({
        show: true
    }); // 打开一个可视化的浏览器
    let counter = 0;
    // let next = null;
    let links = [];

    yield scraper.goto(url) // 跳转的地址
    .wait();
    // .click('#feed-laliga > a');
    for (let i = 0; i < 5; i++) {
        yield scraper.wait(2000).click('#feed-laliga > a');
    }

    links = yield scraper.evaluate(() = >{
        const temp = document.querySelectorAll('#feed-laliga h3 > a');
        const list = [];
        for (const each of temp) {
            console.log('each');
            console.log(each);
            list.push({
                title: each.innerText,
                url: each.href,
            });
        }
        return list;
    });
    // 在这里 加载更多

    console.log('这里');
    console.dir(links);

    for (const link of links) {
        if (link !== null && link.url !== 'javascript:void(0)') {
            counter += 1;
            setTimeout(() = >{
                getHtml(link);
            },
            counter * links.length * 250);
        }
    }
    yield scraper.end();
}).
catch(onError);

您的支持是我们创作的动力!
温馨提示:本文作者系 ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://jiangweishan.com/article/js8ud89230948239084.html

网友评论文明上网理性发言 已有0人参与

发表评论: