1、爬虫相关的包

(1)const request =  require('superagent'); // 处理get post put delete head 请求  轻量接http请求库,模仿浏览器登陆

(2)const cheerio = require('cheerio'); // 加载html
(3)const fs = require('fs'); // 加载文件系统模块 将数据存到一个文件中的时候会用到

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

(4)const fs      = require('graceful-fs'); // 将文件存为xlse

const writeStream = fs.createWriteStream('saveFiles/trader.xlsx'); //新建xlsx文件

writeStream.write(title);//像slsx里面写入内容

(5)const Promise = require('bluebird'); //异步处理

(6)const Nightmare = require('nightmare');//一个高层次的浏览器自动化图书馆  先要安装phantomjs 然后在装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);

js爬虫的更多相关文章

  1. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  2. node.js爬虫

    这是一个简单的node.js爬虫项目,麻雀虽小五脏俱全. 本项目主要包含一下技术: 发送http抓取页面(http).分析页面(cheerio).中文乱码处理(bufferhelper).异步并发流程 ...

  3. Node.js aitaotu图片批量下载Node.js爬虫1.00版

    即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaot ...

  4. Node.js umei图片批量下载Node.js爬虫1.00

    这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ...

  5. Node.js abaike图片批量下载Node.js爬虫1.01版

    //====================================================== // abaike图片批量下载Node.js爬虫1.01 // 1.01 修正了输出目 ...

  6. Node.js abaike图片批量下载Node.js爬虫1.00版

    这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaik ...

  7. Node JS爬虫:爬取瀑布流网页高清图

    原文链接:Node JS爬虫:爬取瀑布流网页高清图 静态为主的网页往往用get方法就能获取页面所有内容.动态网页即异步请求数据的网页则需要用浏览器加载完成后再进行抓取.本文介绍了如何连续爬取瀑布流网页 ...

  8. Node.js 爬虫爬取电影信息

    Node.js 爬虫爬取电影信息 我的CSDN地址:https://blog.csdn.net/weixin_45580251/article/details/107669713 爬取的是1905电影 ...

  9. Node.js 爬虫初探

    前言 在学习慕课网视频和Cnode新手入门接触到爬虫,说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherrio. 使用http直接获取url路 ...

  10. Node.js 爬虫,自动化抓取文章标题和正文

    持续进行中... 目标: 动态User-Agent模拟浏览器 √ 支持Proxy设置,避免被服务器端拒绝 √ 支持多核模式,发挥多核CPU性能 √ 支持核内并发模式 √ 自动解码非英文站点,避免乱码出 ...

随机推荐

  1. AutoIt操作Windows GUI实现文件上传

    AutoIt 一个使用类似BASIC脚本语言的免费软件,用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务. 官方网站: htt ...

  2. Shell 重定向

    一直没搞懂 &> 和 <& 是表示什么意思. 今天自己总结一下,希望自己能理解它的真正含义. 重定向标准输入输出,切记 “1” 和 “>”之间没有空格 $ > ...

  3. How to change hostname on SLE

    修改/etc/HOSTNAME文件,在此文件中保存主机名,例如: linuxserv1 然后运行命令设置主机名 # /etc/rc.d/boot.localnet start 方法3. 运行 sysc ...

  4. 记一次MVC4站点在IIS上部署的诡异问题

    最近朋友的公司遇到一个站点部署问题, 朋友从事服务器维护多年,说也是花了十多天仍为解决. 经多次尝试未果,仍报错如下: 我询问了相关情况,确认了该网站是VS2013开发的,版本为,NET Framew ...

  5. PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌

    -自测1. 打印沙漏() 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号 ...

  6. C/C++ 结构体 指针 简单输入输出

    #include <stdio.h> #include <stdlib.h> struct student{ int num; ]; double dec; }; int ma ...

  7. Struts2批量验证(POC)

    only poc , 再据结果利用EXP进一步测试: 支持 -u 单个url; -f 文本批量URL导入 url列表格式是https://www.baidu.com #! /usr/bin/env p ...

  8. HTML5元素、属性和格式化

  9. C++笔记(二)------ 头文件

    类似#include<string>与#include<string.h>等头文件的区别 标准的C++头文件没有.h扩展名,带有.h的头文件一般都是C语言的.例如#includ ...

  10. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...