npm安装cheerio和axios

npm isntall cheerio npm install axios

利用cheerio抓取对应网站中的标签根据链接使用axios获取对应页面数据

const cheerio = require('cheerio');
//获取HTML文档的内容
const request = require('request');
const {writeFile,mkDir} = require('../lcf');
const fs = require('fs');
const url = require('url');
const path = require("path");
const axios = require("axios");
const { title } = require('process');
const httpUrl = "https://www.pkdoutu.com/article/list"; async function wait(millSeconds) {
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("success");
},millSeconds);
})
}
function req(options) {
return new Promise((resolve,reject) => {
request.get(url,headers,function(err,response,body) {
if(err) {
reject(err);
} else {
resolve({response,body});
}
})
})
} async function getPageNum() {
const { response,body } = await req(httpUrl);
const $ = cheerio.load(body);
const linkLength = $('.page-link').length;
let num = $('.page-link').eq(linkLength - 2).text();
return num;
} async function getImgList() {
let allNum = await getPageNum();
for(let i=1;i<=10;i++) {
if(i!=1) {
await wait(3000*i);
}
parsePage(httpUrl+"?page="+i)
}
}
async function parsePage(url) {
let { response,body } = await req(url);
let $ = cheerio.load(body);
let reg = /(.*?)\d/i;
$('#home .col-sm-9>a').each(async (index,ele) => {
let pageUrl = $(ele).attr('href');
let title = $(ele).find('.random_title').text();
title = reg.exec(title)[1];
let reg2 = /[/*?:<>|\"\\\\]+/g;
title = title.replace(reg2,"");
console.log(title)
if(!fs.existsSync("img/"+title)) {
mkDir("img/"+title);
console.log("创建目录成功:",title);
getImg(pageUrl,title);
}
})
} async function getImg(pageUrl,title) {
let { response,body } = await req(pageUrl);
let $ = cheerio.load(body);
$('.pic-content img').each(async (index,ele) =>{
await wait(50*index);
let imgUrl = $(ele).attr('src');
let extName = path.extname(imgUrl);
//创建文件写入流
let imgPath = `img/${title}/${title}-${index}${extName}`;
let ws = fs.createWriteStream(imgPath);
axios.get(imgUrl,{responseType: 'stream'}).then(res => {
res.data.pipe(ws);
console.log("图片加载完成:" + imgPath)
})
})
}; getImgList();

如果对应网站有SSL证书,可以利用puppeteer模拟浏览器进行操作

npm install puppeteer

let puppeteer = require('puppeteer');

async function test() {
let options = {
defaultViewport: {
width: 1400,
height: 800
},
headless: false
} let browser = await puppeteer.launch(options);
let page = await browser.newPage();
await page.goto('https://www.taobao.com/');
await page.screenshot({path: "screenshot.png"});
//$eval 返回一个promise对象
//$page 返回一个elementHandle
// let elementArr = await page.$$eval(".service-bd a",(elements)=>{
//$获取一个元素 $$获取多个元
//$waitfor 等待元素完成
let elementArr = await page.$$(".service-bd a",(elementArr) => {
let eles = [];
elements.forEach((item,index) => {
if(item.getAttribute("href")!="#") {
var eleobj = {
href: item.getAttribute("href"),
text: item.innerHTML
}
eles.push(eleobj);
}
})
return eles;
}) let searchInput = await page.$('#q',(ele) => {
return ele;
}) await searchInput.focus();
await page.keyboard.type("台灯"); let searchBtn = await page.$(".btn-search",(ele) => elementArr)
await searchBtn.click(); // let loginId = await page.$("#fm-login-id",(ele) => ele);
// let loginPassword = await page.$("#fm-login-password",(ele) => ele); // setTimeout(async ()=>{
// await loginId.focus();
// await page.keyboard.type("3161775809@qq.com");
// setTimeout(async ()=>{
// await loginPassword.focus();
// await page.keyboard.type("a13851467182");
// },4000) // },4000); page.on('console',function(eventMsg){
console.log(eventMsg.text());
})
} test();

Node爬取网站数据的更多相关文章

  1. 利用linux curl爬取网站数据

    看到一个看球网站的以下截图红色框数据,想爬取下来,通常爬取网站数据一般都会从java或者python爬取,但本人这两个都不会,只会shell脚本,于是硬着头皮试一下用shell爬取,方法很笨重,但旨在 ...

  2. 手把手教你用Node.js爬虫爬取网站数据

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度 ...

  3. python爬取网站数据

    开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...

  4. 利用phpspider爬取网站数据

    本文实例原址:PHPspider爬虫10分钟快速教程 在我们的工作中可能会涉及到要到其它网站去进行数据爬取的情况,我们这里使用phpspider这个插件来进行功能实现. 1.首先,我们需要php环境, ...

  5. python爬取网站数据保存使用的方法

    这篇文章主要介绍了使用Python从网上爬取特定属性数据保存的方法,其中解决了编码问题和如何使用正则匹配数据的方法,详情看下文     编码问题因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这 ...

  6. C# 关于爬取网站数据遇到csrf-token的分析与解决

    需求 某航空公司物流单信息查询,是一个post请求.通过后台模拟POST HTTP请求发现无法获取页面数据,通过查看航空公司网站后,发现网站使用避免CSRF攻击机制,直接发挥40X错误. 关于CSRF ...

  7. 3.15学习总结(Python爬取网站数据并存入数据库)

    在官网上下载了Python和PyCharm,并在网上简单的学习了爬虫的相关知识. 结对开发的第一阶段要求: 网上爬取最新疫情数据,并存入到MySql数据库中 在可视化显示数据详细信息 项目代码: im ...

  8. 使用node.js如何爬取网站数据

    数据库又不会弄,只能扒扒别人的数据了. 搭建环境: (1).创建一个文件夹,进入并初始化一个package.json文件.  npm init -y (2).安装相关依赖:  npm install ...

  9. Python 爬取网站数据

    一.使用request库实现批量下载HTML 二.使用BeautifulSoup库实现html解析 官网:https://beautifulsoup.readthedocs.io/zh_CN/v4.4 ...

随机推荐

  1. dfs:x+y=z

    #include <iostream.h> int a[100]; static int stat=0; void dfs(int n) { if(n==3) { if(a[0]+a[1] ...

  2. JdbcTemplate?

    JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理.

  3. 什么是 spring 的内部 bean?

    只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean. 为了定义 bean,Spring 的基于 XML 的配置元数据在 <property> 或 &l ...

  4. Memcached 服务特点及工作原理是什么?

    a.完全基于内存缓存的 b.节点之间相互独立 c.C/S 模式架构,C 语言编写,总共 2000 行代码. d.异步I/O 模型,使用 libevent 作为事件通知机制. e.被缓存的数据以 key ...

  5. (转载)mos管电压规格是什么,什么是VMOS管栅极

    电压规格:VDSS.VDS.BVDSS.V(BR)DSS VDSS中的"V"表示电压,前面的"D"."S"表示"Drain&quo ...

  6. 写一段代码在遍历 ArrayList 时移除一个元素?

    该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法.这有一段示例代码,是使用正确的方式来实现在遍历的过程中移 除元素,而不会出现 ...

  7. 我们能在 Switch 中使用 String 吗?

    从 Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法 糖.内部实现在 switch 中使用字符串的 hash code. 30.Java 中的构造器链是什么? ...

  8. python-使用函数求特殊a串数列和

    给定两个均不超过9的正整数a和n,要求编写函数fn(a,n) 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列和 函数接口定义: 1 fn(a,n) 2 其中 a 和 n 都是用 ...

  9. 【Weex笔记】-- Animate.css的使用

    animate.css是一个使用CSS3的animation制作的动画效果的CSS集合,里面预设了很多种常用的动画,且使用非常简单.本文将详细介绍animate.css的使用. 一,安装辅助依赖 np ...

  10. java中如何按一定的格式输出时间, 必须给出例子

    题目2: 按一定的格式输出时间 import java.util.*;import java.text.SimpleDateFormat;public class Test {    public s ...