单单P 2018-04-27 17:42 采纳率: 50%
浏览 577
已结题

爬虫:期望自动打开多个网页中标题包含aaa的网页链接,但始终不成功,求助!

1、需求:期望自动打开页码是1-10的网页中,标题包含aaa的网页链接;
2、目前打开一页是可以的,但是我希望自动执行多个页面;
3、请问我如何重复多次调用nightmare抓取从第1页到第10页的链接数据(即调用10次nightmare)?async和eventproxy都试了,没有成功,求助!

 问题对人有帮助,内容完整,我也想知道答案0 问题没有实际价值,缺少关键内容,没有改进余地
1、需求:期望自动打开页码是1-10的网页中,标题包含aaa的网页链接;
2、目前打开一页是可以的,但是我希望自动执行多个页面;
3、请问我如何重复多次调用nightmare抓取从第1页到第10页的链接数据(即调用10次nightmare)?async和eventproxy都试了,没有成功,求助!

var c = require('child_process');
var request = require('request');
var cheerio = require('cheerio');
var path = require('path');
var fs = require('fs');
var Nightmare = require('nightmare');       
var nightmare = Nightmare({}); //  show: true
var async = require('async');
var EventProxy = require('eventproxy');
var baseUrl = 'http://www.abc.cn';
var requrl = 'http://www.abc.cn/index.html?uid=123456&pageNum=';   //1.先输入要访问的URL

var startPage = 1;
var endPage = 10;

// how to fix the code ...

function getPageUrls(page) {
  nightmare
  // 加载页面
  .goto(requrl + page)
  //  .type('#search_form_input_homepage', 'github nightmare')
  .inject('js', './js/jquery.min.js')
  // 点击刷新获得真实数据,不然仅通过链接并不会真实更新数据
  .click('.default_pgRefresh')
  // 等待选择器加载完毕,可以用数值(表示等待时间,单位毫秒),必须!!!
  .wait(6000)
  // 浏览器内页面执行,获得列表数据
  .evaluate(function () {
    return document.querySelector('.default_pgContainer').innerHTML;
    // return document.querySelector('#zero_click_wrapper .c-info__title a').href;
  })
  .end()
  .then(function (result) { // 重要:函数参数为evaluate的返回值!!!
    acquireData(result);  // 返回数据
  })
  .catch(function (error) {
    // console.error('Search failed:', error);
  });
}

function acquireData(data) {
    var $ = cheerio.load(data); 
    var tableData = $('li').toArray();
    // console.log(tableData.length);
    // console.log(tableData);

    // li列表数据
    let mainLength = tableData.length;
    var gg = 0, gs = 0;

    for (var i=0; i<mainLength; i++) {
          let tempData = tableData[i];

          let title = tempData['children'][1].attribs.title;
          let detailUrl = tempData['children'][1].attribs.href;

          if (title.indexOf("aaa") > 0) {
              c.exec('start ' + baseUrl + detailUrl);
              console.log(baseUrl + detailUrl);
          }
     }  

}

  • 写回答

3条回答 默认 最新

  • 大蛇王 2018-04-28 03:42
    关注

    nodejs不懂,如果是python的话,这个用scrapy框架写就太简单了照着模板套就行了

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题