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);
}
}
}