cherrio写的爬虫可以爬取主页,但是无法爬取产品页面,为什么?

发布于 2022-09-06 22:01:40 字数 2522 浏览 10 评论 0

从网站抄了一个爬虫想爬点产品信息,不知道为什么产品单页就是爬不下来。
但是测试了下其它页面都是可以爬的,为什么呢?
搜获了下返回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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

分開簡單 2022-09-13 22:01:40

找到问题了,网页用Angular动态加载的,爬虫爬取的时候都是空的,就报错咯~~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文