cherrio写的爬虫可以爬取主页,但是无法爬取产品页面,为什么?
从网站抄了一个爬虫想爬点产品信息,不知道为什么产品单页就是爬不下来。
但是测试了下其它页面都是可以爬的,为什么呢?
搜获了下返回error信息,和爬虫似乎毫无关系。
返回error
events.js:183
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at _errnoException (util.js:1022:11)
at TLSWrap.onread (net.js:628:25)
附上代码:
var cheerio = require('cheerio');
var http = require('https');
var iconv = require('iconv-lite');
var index = 1;
var n = 0;
var url = 'https://www.thermofisher.com/search/browse/category/cn/zh/602198?navId=10861&resultPage=';
var titles = [];
var datas = [];
//获取目录的href
function getTitle(url, i) {
console.log('now get ' + i + ' page');
http.get(url + i + '&resultsPerPage=15', function(sres) {
var chunks = [];
sres.on('data', function(chunk) {
chunks.push(chunk);
});
sres.on('end', function() {
var html = iconv.decode(Buffer.concat(chunks), 'UTF-8');
var $ = cheerio.load(html, { decodeEntities: false });
$('h2>a').each(function(idx, element) {
var $element = $(element);
titles.push({
title: $element.attr('href')
});
});
if (i < 5) {
getTitle(url, ++index);
} else {
console.log(titles);
console.log("over");
getData(titles, n);
}
})
})
}
//获取产品信息
function getData(urls, n) {
console.log('now get ' + n + ' data');
var link = urls[n].title.toString();
console.log(link);
http.get(link, function(sres) { //这里出错,卡一段时间后报错,把link换成其它地址可以爬去。
var chunks = [];
sres.on('data', function(chunk) {
chunks.push(chunk);
})
sres.on('end', function() {
var html = iconv.decode(Buffer.concat(chunks), 'UTF-8');
var $ = cheerio.load(html, { decodeEntities: false });
$('.container h1').each(function(idx, element) {
var $element = $(element);
console.log($element);
datas.push({
name: $element.text()
});
});
if (n < urls.length - 1) {
getData(titles, ++n);
} else {
console.log('ok');
console.log(datas);
}
})
})
}
function main() {
console.log("start");
getTitle(url, index);
}
main();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到问题了,网页用Angular动态加载的,爬虫爬取的时候都是空的,就报错咯~~