网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
JavaScript爬虫:
爬虫,大多人对于爬虫的理解都停留在使用后端语言如Python写的爬虫。但是实际上,使用客户端JavaScript有诸多后端爬虫所无法拥有的优势:
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);
从爬虫的攻防角度来讲,最简单的爬虫,是几乎所有服务端、客户端编程语言都支持的http请求,只要向目标页面的url发起一个http get请求,即可获得到浏览器加载这个页面时的完整html文档,这被我们称之为“同步页”。
数据收集的一种是方式是通过上报API进行自身平台用户交互情况的捕获,还有一种手段是通过开发爬虫程序,爬取竞品平台的数据,后面就重点说下爬虫的应用场景和实践中会遇到的问题和反反爬虫的一些套路与技巧。
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。是互联网爬虫,蜘蛛,数据采集器,网页解析器的汇总,下面介绍各语言实现网络爬虫的开源框架
PhantomJS无界面的浏览器:认识PhantomJS、网站模拟登录豆瓣网、动态页面模拟点击(unittest -python测试模块)、执行JavaScript代码、模拟最新无界面浏览器...
网络爬虫在数据采集方面有好的优势,比如采集速度快,比人来操作可能要快一千倍一万倍都不止;方便将获取的数据进行相关的清洗加工以及储存工作;代码可重复使用,或者说是一劳永逸。
每个网站主页是网站资源的入口,当重定向发生在网站主页时,如果不能正确处理就很有可能会错失这整个网站的内容。 笔者编写的爬虫在爬取网页时遇到了三种重定向的情况。
之前由于公司项目需要,采集过google地图数据,还有一些大型网站数据。 有小部分网站的防范措施比较弱,可以伪装下IP,修改X-Forwarded-for(貌似这么拼。。。)即可绕过。ser agent 伪装和轮换 ,使用代理 ip 和轮换
在爬网站时,发现网站做了百度云加速,每次访问首页时要求输入验证码,才能打开网站首页。经过分析网站,发现如果你拿到一个当期可用的Cooikes后,你就可以一直爬数据,且并不会触发百度验证输入
完整的反爬体系有三大部分工作要做:感知识别、策略分析、监控封禁。数据支撑:爬虫指纹、设备指纹、风险UA、IP库等,不同端指纹的mapping等。
node.js是一款基于google的V8引擎开发javascript运行环境。在高性能的V8引擎以及事件驱动的单线程异步非阻塞运行模型的支持下,node.js实现的web服务可以在没有Nginx的http服务器做反向代理的情况下实现很高的业务并发量。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!