http.get做爬虫
要找准页面响应的数据!!!
要找准页面响应的数据!!!
要找准页面响应的数据!!!
找准地址
找准标签对应的属性,自己需要的数据,在下面都是要一一对应的
1.初始化文件夹: npm init -y
2.需要三个包: npm i 包名
http(或https看你偷什么网站喽),
cheerio(它老厉害了,凭他可以在node里用jquery方法),
mysql(可以把数据存到你的库中,除非你对偷来的数据过目不忘)
3.建一个js文件引入三个包:推荐用const,这个定义了改不了,也不该动他,一文只有它一个,引入文件放在最上面
const https = require('https');
const cheerio = require('cheerio');
const mysql = require('mysql');
4: 建个数据库:
我在test下建了一个movie;(电影网)
栏位有:id(自增);imgpath;title;score;title2
先连接数据库:var mysql = require('mysql');
百度 : nodejs mysql 连接数据库 =>菜鸟教程=>插入数据
5:运行:
命令窗口: node movie.js
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
port: '3306',
database: 'test'
});
connection.connect();
var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
var addSqlParams = ['菜鸟工具', 'https://c.runoob.com','23453', 'CN'];
//增
connection.query(addSql,addSqlParams,function (err, result) {
if(err){
console.log('[INSERT ERROR] - ',err.message);
return;
}
console.log('--------------------------INSERT----------------------------');
//console.log('INSERT ID:',result.insertId);
console.log('INSERT ID:',result);
console.log('-----------------------------------------------------------------\n\n');
});
connection.end();
整个程序
const https = require('https');
const cheerio = require('cheerio');
const mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root',
port: '3306',
database: 'test'
});
connection.connect(); // 连接数据库的
/*
1,确定目标网址
2,爬取目标网址的内容
3,解析,得到 目标
*/
function a(item){
https.get('https://www.1905.com/vod/list/n_1_t_1/o3p'+item+'.html', (res) => {
let rawData = '';
res.on('data', (chunk) => {
rawData+=chunk.toString();
});
/*
数据 如果比较大,分段传输的,过来一段数据 data执行一次
*/
res.on('end', () => {
// 得到 所以的img的src属性
const $ = cheerio.load(rawData);
$(".search-list>div").each((i,el)=>{
var imgpath = $(el).find("img").attr("src");
var title = $(el).find("h3").text();
var score = $(el).find("b").text();
var title2 = $(el).find("p").text();
var addSql = 'INSERT INTO movie(imgpath,title,score,title2) VALUES(?,?,?,?)';
var addSqlParams = [imgpath, title,score,title2];
//增
connection.query(addSql,addSqlParams,function (err, result) {
if(err){
console.log("数据库连接出错");
}else{
item++;
a(item);
console.log("完美");
}
});
})
});
}).on('error', (e) => {
console.error(`出现错误: ${e.message}`);
})
}
a(1);
request做爬虫
1.面向百度
进入地址: https://www.npmjs.com/
2.需要引入的包
连接数据库:mysql
请求地址:request
专为服务器设计的核心jQuery的快速: cheerio
想要放到自己数据库,首先得连接并插入数据
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
port: '3306',
database: 'test'
});
connection.connect();
var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
var addSqlParams = ['菜鸟工具', 'https://c.runoob.com','23453', 'CN'];
//增
connection.query(addSql,addSqlParams,function (err, result) {
if(err){
console.log('[INSERT ERROR] - ',err.message);
return;
}
console.log('--------------------------INSERT----------------------------');
//console.log('INSERT ID:',result.insertId);
console.log('INSERT ID:',result);
console.log('-----------------------------------------------------------------\n\n');
});
connection.end();
然后使用node中的request请求地址
request模块让http请求变的更加简单。最简单的一个示例:
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
})
实现的程序
// 安装三个包
const request = require("request") ;
const cheerio = require("cheerio")
const mysql = require('mysql')
var connection = mysql.createConnection({ //配置参数,然后添加你的数据库里面的表
host: 'localhost',
user: 'root',
password: 'root',
database: 'test'
})
connection.connect(); // 与数据库建立连接
function show(item){
request('http://www.1905.com/vod/list/n_1_t_1/o1p'+item+'.html',function(err,res){ // 请求地址
if(err){
console.log('请求出错');
}else{
// console.log(res);
var $ = cheerio.load(res.body); // cheerio可以在node中使用jquery方法
$('.search-list>div').each(function(){
var newsTitle = $(this).find('p').text();
var news1Title = $(this).find('h3').text();
var code = $(this).find('i').text();
var newsUrl= $(this).find('a').attr('href');
var addSql = "insert into movie(title,href,title2,codeNum) values (?,?,?,?,?)";
var addParmas = [newsTitle, newsUrl,news1Title,code];
connection.query(addSql,addParmas,function(err,data){
if(err){
console.log("数据库连接错误");
}else{
item++;
show(item)
}
})
});
}
});
}
show(1)
在test下建立movie数据库,有5个栏位: id,title,href,title2,codeNum