关于node请求数据 爬取网易云数据
时间:2019-08-22
本文章向大家介绍关于node请求数据 爬取网易云数据,主要包括关于node请求数据 爬取网易云数据使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在用node爬取网易云音乐信息时候 在很多地方是不如python简单 方便
但是下面的这个案例会报错
再读文档时候 源码有些地方出错 要改源码 (不建议更改源码)
const fs = require("fs")
const cheerio = require("cheerio")
const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true, openDevTools: { mode: 'detach' } })
let home_url = "https://music.163.com/#/discover/artist/cat?id=1002"
nightmare
.goto(home_url)
.click(".m-cvrlst li:nth-child(2) a", () => { // 这个地方 要想不报错 只能从源码更改
console.log("点击完了......")
setTimeout(() => {
console.log("新界面....")
nightmare.goto("https://music.163.com/#/artist?id=8103")
.evaluate(() => {
return document.querySelector(".g-iframe").contentWindow.document.querySelector("body").innerHTML
})
.then((data) => {
console.log("开始查询.,,....")
let $ = cheerio.load(data)
let songs = []
$(".m-table tr .txt a").each((i, item) => {
let song_id = $(item).attr("href")
let song_name = $(item).find("b").attr("title")
let tmp_dic = {
"song_id": song_id,
"song_name": song_name
}
songs.push(tmp_dic)
})
let songs_string = JSON.stringify(songs)
let file_name = "./test" + $(".sname-max").text() + ".json"
fs.writeFile(file_name, songs_string, () => {
})
})
}, 2000);
})
.then(() => {
})
//------------------------------------------------------
//下面是源码
从源码做了一些更改
xports.click = function(selector, done) {
debug('.click() on ' + selector)
this.evaluate_now(
function(selector) {
document.activeElement.blur()
// var element = document.querySelector(selector)
var element = ""
if(document.querySelector(".g-iframe").contentWindow.document) {
element = document.querySelector(".g-iframe").contentWindow.document.querySelector(selector)
}else{
var element = document.querySelector(selector)
}
if (!element) {
throw new Error('Unable to find element by selector: ' + selector)
}
原文地址:https://www.cnblogs.com/bl11-07/p/11396727.html
- 让陌生人能够相互自由交易和支付
- 斯坦福发布首份 AI Index 报告,AI 研究者不再茫然
- jQuery仿极客公园火箭发射“返回顶部”效果(初始篇)
- Java程序员必读,Java设计模式应该遵循哪些原则
- Visual Studio 2010快速参考指南里头的Scrum海报
- TFS2010 Team Project Collections
- 基于Ext.Panel扩展一个更容易操作的Canvas
- 好玩的效果很好的Html游戏和范例
- jQuery仿极客公园火箭发射“返回顶部”效果(优化篇)
- 北京市首个无人驾驶试运营基地落户顺义
- 后rtx集成时代
- 后短信集成时代
- jQuery仿极客公园火箭发射“返回顶部”效果(WordPress代码篇)
- Windows 2008 R2 Server Core .NET环境配置
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [892]python中re.split()方法
- MacOS抓包工具Charles
- PYTHON替代MATLAB在线性代数学习中的应用(使用Python辅助MIT 18.06 Linear Algebra学习)
- C# TCP/IP 文件(图片、视频等)收发系统
- 反制面试官 | 14张原理图 | 再也不怕被问 volatile!
- Javascript之其实我觉得原型链没有难的那么夸张!
- 归纳一下:C#线程同步的几种方法
- C# 主界面的扁平化
- C# LINQ
- Oracle基本参数(DB_NAME)
- Oracle基本参数(DB_RECOVERY_FILE_DEST,DB_RECOVERY_FILE_DEST_SIZE)
- Oracle基本参数(DB_UNIQUE_NAME)
- Oracle基本参数(DB_DOMAIN)
- Oracle基本参数(INSTANCE_NUMBER)
- Oracle基本参数(LDAP_DIRECTORY_SYSAUTH)