javascript可以爬虫吗?零基础入门_爬虫入门指南

网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。JavaScript爬虫:爬虫,大多人对于爬虫的理解都停留在使用后端语言如Python写的爬虫。但是实际上,使用客户端JavaScript有诸多后端爬虫所无法拥有的优势:可以方便的分享给其他人用,只要对方电脑里有浏览器由于跑在客户端,几乎可以无视对方网站的反爬

javascript可以爬虫吗?零基础入门

网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

javascript可以爬虫吗?零基础入门_爬虫入门指南

JavaScript爬虫:

爬虫,大多人对于爬虫的理解都停留在使用后端语言如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);
海计划公众号
(0)
上一篇 2020/03/20 07:34
下一篇 2020/03/20 07:34

您可能感兴趣的内容

  • 程序员大牛们的经典语录 小白基础_语录小白指南

    1、很多问题不见得会出在你身上,但你亦需要想法解决问题,否则就会变成你的问题;2、懂得但策略的说不(不会这个准备累死吧,程序员);3、我考进事业单位,呵呵,没有传说中的那么好环境。这里待遇低下,事情繁杂,领导众多,群众骚扰得我不胜其烦;4、真的,程序员走了管理路线,反而会感到人生非常多浪费时间,太多的精力用来应付各类琐事……5、不只会埋头写程序;6、不断规划

    2020/03/29
  • qs.js使用教程更好的处理url参数_url菜鸟指南

    第一次接触qs这个库,是在使用axios时,用于给post方法编码,在使用过程中,接触到了一些不同的用法,写在这里分享一下。qs.parseqs.parse方法可以把一段格式化的字符串转换为对象格式,比如let url = ‘http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e’;
    let data = qs.

    2020/04/05
  • slideout.js基础入门移动 Web 应用开发的触摸滑出式的导航菜单

    slideout.js小白基础 官方网址:https://github.com/mango/slideout/releases/ GitHub:https://github.com…

    2020/03/06
  • medium-zoom小白常识_用于缩放图像的JavaScript库

    medium-zoom小白常识 官方网址:https://medium-zoom.francoischalifour.com/ GitHub:https://github.com/…

    2020/03/07
  • 访问http网站Safari提示网站不安全怎么办?基础入门_安全入门基础

    macOS和iOS上的Safari在所有通过HTTP连接的地址栏中会显示“不安全”的警告。去年,谷歌Chrome和火狐MozillaFirefox是最先显示这种警告的主流浏览器。当通过HTTP连接时,Safari中的所有页面都会显示“不安全”警告。如果页面包含表格字段,当用户在输入时,这种“不安全”警告还会变成红色。HTTP的风险如果您访问有这种警告的网站,

    2020/03/29
  • window.open被拦截的解决方法总汇 基础知识入门_浏览器菜鸟知识

    在 Chrome 的安全机制里,非用户直接触发的 window.open 方法,是会被拦截的。这是由于浏览器为了维护用户安全和体验,禁止在JS中直接使用window.open(url)来打开新的链接(window.open(url,”_self”)改变当前的窗口是可以生效的)。下面采用几种变通方法解决:1.表单提交的方式var form = document

    2020/04/03
  • ypppt菜鸟教程_高质量的免费PPT模板下载网站

    ypppt菜鸟教程 官方网址:http://www.ypppt.com/ 简介描述:高质量的免费PPT模板下载网站 优品PPT模板网是一家专注于分享高质量的免费PPT模板下载网站,…

    2020/03/10
  • Composer攻略教程_Packagist / Composer中国全量镜像

    Composer攻略教程 官方网址:https://pkg.phpcomposer.com/ 简介描述:Packagist / Composer中国全量镜像 Packagist /…

    2020/03/06
  • Gumby小白常识_基于Sass创建的响应式CSS框架

    Gumby小白常识 官方网址:https://gumbyframework.com/ GitHub:https://github.com/GumbyFramework/Gumby …

    2020/03/06
  • Node 集群源码初探教程视频_源码菜鸟教程下载

    引言当我们谈起 nodejs 时,由于 JavaScript 只能在单线程上运行, 导致 一个 Node 进程只能运行在一个CPU上, 无法发挥现代 CPU 多核的特性。 这对于一个 服务端语言来说, 是比较掣肘其发展的。 好在 Node 在 v0.10 后, 可以使用 Cluster 模块搭建 多进程服务, 并在 v0.12 重写了该模块, 大幅提高其性能

    2020/03/29
  • 程序员必备的学习工具入门百科_工具基础指南

    01 搜索资源网站学习技术过程我们经常需要使用搜索引擎来检索资料,国内常用的也就是某度了。当然有条件的话,搜索引擎首先还是推荐使用 Google,如果没办法使用,可以使用以下几个作为备用:BingBing 国际版:https://cn.bing.com/比某度好用,之前还被停用了几天,最近可以了。DuckDuckGoDuckDuckGo:https://du

    2020/03/20
  • PHP如何打造一个高可用高性能的网站呢?使用帮助_php使用帮助

    说到高可用的话要提一下redis,用过的都知道redis是一个具备数据库特征的nosql,正好弥补了PHP的瓶颈,个人认为PHP的 瓶颈在于数据库,像Apache和Nginx的高级web服务器在承受并发量上面都各有千秋,apache的最大承受并发数可以到三四千个,nginx要是它的10倍,但apache的三四千个是实打实的三四千个,nginx的并发数是要依靠

    2020/04/03
  • 21 项优化 React App 性能的技术入门攻略_react小白教程

    介绍在 React 内部,React 会使用几项巧妙的小技术,来优化计算更新 UI 时,所需要的最少的更新 DOM 的操作。在大多数情况下,即使你没有针对性能进行专项优化,React 依然很快,但是仍有一些方法可以加速 React 应用程序。本文将介绍一些可用于改进 React 代码的有效技巧。1.使用不可变数据结构数据不变性不是一种架构或者设计模式,它是一

    2020/03/29
  • Openlayers 禁用鼠标双击缩放事件(ol.interaction.DoubleClickZoom)入门基础_事件小白知识

    说明openlayers地图加载时,默认会有9个交互事件其中可以看到控制双击缩放事件的DoubleClickZoom我们知道在绘制线时,结束的响应事件也是双击,所以在绘制线时和双击缩放事件就会冲突了。解决方案const dblClickInteraction = map.getInteractions().getArray().find(interactio

    2020/03/22
  • JavaScript中的行为委托小白指南_js知识入门基础教程

    什么是行为委托?简单来说就是一种设计模式,不同于传统的构造函数的“类”式设计。在这之前先说一下原型的基本知识。什么是原型?简单来说就是一个对象内部关联另外一个对象,本质来说就是对象与对象之间的关联;一个对象本身没有属性或者方法会到原型对象上查找。这里每个例子会通过构造函数,class和行为委托来不同实现,不过不会评论class,是否使用class取决于你的观

    2020/04/03
  • JavaScript中,数组和对象的遍历方法总结基础知识_遍历入门攻略

    循环遍历是写程序很频繁的操作,JavaScript 提供了很多方法来实现。这篇文章将分别总结数组和对象的遍历方法,新手可以通过本文串联起学过的知识。数组遍历方法一:for 循环for 循环是使用最多,也是性能优化最好的一种遍历方式。var arr = [“a”, “b”, “c”];
    for (var i = 0; i < arr.length; i++)

    2020/03/20