nodejs爬虫 - node爬虫,爬不到数据,不知道问题出在哪
本文介绍了nodejs爬虫 - node爬虫,爬不到数据,不知道问题出在哪的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
var http = require("http");
var cheerio = require("cheerio");
var tagetUrl = "http://music.163.com/m/";
var html = "";
http.get(tagetUrl, (res) => {
res.on("data", function(data){
html += data;
})
res.on("end", ()=>{
const $ = cheerio.load(html);
var result = $(".tabtxt");
console.log(result.html());
})
})
执行的结果是null。爬不到的原因是什么
解决方案
因为这个页面被重定向了……返回的 http 状态码是 302,同时没有 body。所以 data 是空的。
如果要处理重定向,可以像下面这样做处理:
var http = require("http");
var cheerio = require("cheerio");
var myTargetUrl = "http://music.163.com/m/";
var html = "";
const request = (targetUrl) => http.get(targetUrl, (res) => {
"use strict";
const statusCode = res.statusCode;
if (statusCode === 302) {
const redirectUrl = res.headers['location'];
request(redirectUrl);
} else {
res.setEncoding('utf8');
res.on("data", function(data){
html += data;
})
res.on("end", ()=>{
const $ = cheerio.load(html);
var result = $(".tabtxt");
console.log(result.html());
})
}
})
request(myTargetUrl);
但是这里搞出来的结果还是 null
。为什么呢?我看了看,这里的关键不是重定向。其实你本来就是要爬 /m
这个页面,但是因为没有设置 UserAgent 被重定向了。正确的做法是设置 UserAgent。
var http = require("http");
var cheerio = require("cheerio");
var html = "";
http.get({
host: 'music.163.com',
path: '/m',
headers: {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36"
}
}, (res) => {
res.on("data", function(data){
html += data;
})
res.on("end", ()=>{
const $ = cheerio.load(html);
var result = $(".tabtxt");
console.log(result.html());
})
})
这样就能得到满意的结果了:
<span data-reactid="39">推荐音乐</span>
这篇关于nodejs爬虫 - node爬虫,爬不到数据,不知道问题出在哪的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文