所谓的爬虫,其实就是向你想要抓取的目标站点,发送http请求,分析和提取你想要的资源。下面来讲讲爬虫的基本过程。
- 首先选择目标站点,然后发送请求,获取返回的html页面
- 接下来你可以使用正则或者常用的解析库如cheerio
- 最后提取出想要的数据
这是小编自己写的一个简单的,爬虫仅仅是为了学习爬虫哦。主要是已函数为模块,简单易理解。
- 定义url函数,生成url数组
// 生成url地址组
function get_urls (url) {
var urls = [];
for (var i = 0; i <= 10; i++) {
urls.push(url + (i + 1));
}
return urls;
}
2.接下来发送http请求,获取网页内容
// 发送请求获取页面
function get_pages (urls) {
var pages = [];
for (let i = 0, len = urls.length; i < len; i++) {
// 发送http请求
request(urls[i], (err, res, body)=>{
if (!err && res.statusCode === 200)
parse_html(body, i)
})
}
// return pages;
}
3.到了关键一步了,那就是解析内容了哦,小编采用的是cheerio,解析的哦,如果不会cheerio的可以搜一下文档,cheerio和jquery很类似的哦,轻轻松松入门的。
// 解析整个页面
function parse_html (page, index) {
var $ = cheerio.load(page);
var arr = [];
$("#post-list li").each(function(index, el) {
arr.push($(this).find('a').attr('href'))
});
// 抓取单个页面的视频地址
get_video_url(arr);
}
4.最后一步,抓取单个页面的视频地址,然后保存你想要爬取的数据喽!
// 单个页面发送请求,抓取视频地址
function get_video_url (pages_url) {
var base_url = 'https://www.vmovier.com'
pages_url.forEach( function(page, index) {
request((base_url+page), (err, res, body)=>{
if (!err && res.statusCode === 200) {
// 解析视频地址
back_video_url(body);
}
})
});
}
function back_video_url(page) {
var $ = cheerio.load(page);
var video = $("iframe").attr('src');
if (video != undefined) {
video = video.replace(video[4], '');
superagent
.get(video)
.end((err, res)=>{
download_video(res.text)
})
}
}
// 下载视频
function download_video (page) {
var $ = cheerio.load(page);
var url = $("#player").attr('href')
var filename = Math.floor(Math.random()*10000000);
console.log("正在下载:" + filename);
request.get("http:" + url)
.on('error', (err)=>{
console.log(err)
})
.pipe(fs.createWriteStream("./video/"+filename+'.mp4'))
}
小编也是菜鸟一枚,自己突然对爬虫感兴趣了,然后自己学习,掌握了一些爬虫的知识,下面贴一下完整代码
// 发送http请求
var http = require("http");
var request = require('request');
var superagent = require('superagent');
// 解析网页内容
var cheerio = require('cheerio');
// 要爬取url地址
var url = "https://www.vmovier.com/index/index/p/";
var fs = require('fs');
// 生成url地址组
function get_urls (url) {
var urls = [];
for (var i = 0; i <= 10; i++) {
urls.push(url + (i + 1));
}
return urls;
}
// 发送请求获取页面
function get_pages (urls) {
var pages = [];
for (let i = 0, len = urls.length; i < len; i++) {
// 发送http请求
request(urls[i], (err, res, body)=>{
if (!err && res.statusCode === 200)
parse_html(body, i)
})
}
// return pages;
}
// 解析整个页面
function parse_html (page, index) {
var $ = cheerio.load(page);
var arr = [];
$("#post-list li").each(function(index, el) {
arr.push($(this).find('a').attr('href'))
});
// 抓取单个页面的视频地址
get_video_url(arr);
}
// 单个页面发送请求,抓取视频地址
function get_video_url (pages_url) {
var base_url = 'https://www.vmovier.com'
pages_url.forEach( function(page, index) {
request((base_url+page), (err, res, body)=>{
if (!err && res.statusCode === 200) {
// 解析视频地址
back_video_url(body);
}
})
});
}
function back_video_url(page) {
var $ = cheerio.load(page);
var video = $("iframe").attr('src');
if (video != undefined) {
video = video.replace(video[4], '');
superagent
.get(video)
.end((err, res)=>{
download_video(res.text)
})
}
}
// 下载视频
function download_video (page) {
var $ = cheerio.load(page);
var url = $("#player").attr('href')
var filename = Math.floor(Math.random()*10000000);
console.log("正在下载:" + filename);
request.get("http:" + url)
.on('error', (err)=>{
console.log(err)
})
.pipe(fs.createWriteStream("./video/"+filename+'.mp4'))
}
// 主方法体
function main (url) {
var urls = get_urls(url);
var pages = get_pages(urls);
}
// 调用main方法
main(url)
总结
小编用函数的形式,简单的实现了爬取网站上的短视频,小站微阅读也用到了爬虫。当然,大家千万不要频繁的去爬取别人的网站哦,有可能ip会被封的。爬虫的知识还有很多,不单单是这么一点,总的说就是革命尚未成功,仍需努力,今天的分享就到这里喽!