遍历可点击元素列表并将 html 写入相应文件
Loop through list of clickable elements and write out the html to respective files
我正在使用 jQuery 获取包含特定关键字的元素列表。我能够获取元素列表,但我不知道如何遍历每个元素,单击其子元素并下载新加载的页面。这是我目前拥有的 casperjs 代码:
var casper = require('casper').create({
clientScripts: ["/var/www/html/project/public/js/jquery-3.3.1.min.js"]
});
var fs = require('fs');
casper.start('https://m.1xbet.co.ke/en/line/Football/', function () {
var links = casper.evaluate(function () {
$.expr[":"].contains = $.expr.createPseudo(function (arg) {
return function (elem) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
return $("#events-betting").find("li.events__item_head:contains(World cup)");
});
var date = new Date(), year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate();
var folderName = year + '-' + month + '-' + day;
// loop would go here to save each file
var path = "destination/" + folderName + "/1xbet/worldcup-1";
fs.write(path + ".html", this.getHTML(), "w");
});
casper.run();
我想点击链接对象上的 individual 项目 - 它们不是锚标签,而是可点击的 div 内联 javascript聆听点击。
目标是点击包含我感兴趣的特定文本的 div,然后点击后,我可以选择抓取 HTML 并将其保存在文件中,或者获取当前 url;两者都适合我的目的。由于可能有多个 div 包含所需的文本,因此我想要一种遍历每个文本并执行相同操作的方法。
这是我感兴趣的页面示例:
https://m.1xbet.co.ke/en/line/Football/
本例中的父元素是:#events-betting 并且嵌套是一个包含可点击 divs 的 li 标签列表。
I can either choose to scrape the HTML and save it in a file or get the current url
当然,解决方案是针对这个确切站点的,但是在进行网络抓取时,这又是很正常的。
casper.start('https://m.1xbet.co.ke/en/line/Football/', function () {
var links = casper.evaluate(function () {
$.expr[":"].contains = $.expr.createPseudo(function (arg) {
return function (elem) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
var links = [];
// Better to scrpape .events__title as it contains data-href attribute
$("#events-betting").find(".events__title:contains(World cup)").each(function (i, item) {
var lastPartOfurl = item.getAttribute("data-href");
lastPartOfurl = lastPartOfurl.split("/");
links.push("https://m.1xbet.co.ke/en/line/Football/" + item.getAttribute("data-champ") + "-" + lastPartOfurl[1]+'/');
})
return links;
});
console.log(links);
});
结果:
https://m.1xbet.co.ke/en/line/Football/1536237-FIFA-World-Cup-2018/,https://m.1xbet.co.ke/en/line/Football/1204917-FIFA-World-Cup-2018-Winner/,https://m.1xbet.co.ke/en/line/Football/1518431-FIFA-World-Cup-2018-Special-bets/,https://m.1xbet.co.ke/en/line/Football/1706515-FIFA-World-Cup-2018-Teams-Statistics-Group-Stage/
我正在使用 jQuery 获取包含特定关键字的元素列表。我能够获取元素列表,但我不知道如何遍历每个元素,单击其子元素并下载新加载的页面。这是我目前拥有的 casperjs 代码:
var casper = require('casper').create({
clientScripts: ["/var/www/html/project/public/js/jquery-3.3.1.min.js"]
});
var fs = require('fs');
casper.start('https://m.1xbet.co.ke/en/line/Football/', function () {
var links = casper.evaluate(function () {
$.expr[":"].contains = $.expr.createPseudo(function (arg) {
return function (elem) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
return $("#events-betting").find("li.events__item_head:contains(World cup)");
});
var date = new Date(), year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate();
var folderName = year + '-' + month + '-' + day;
// loop would go here to save each file
var path = "destination/" + folderName + "/1xbet/worldcup-1";
fs.write(path + ".html", this.getHTML(), "w");
});
casper.run();
我想点击链接对象上的 individual 项目 - 它们不是锚标签,而是可点击的 div 内联 javascript聆听点击。
目标是点击包含我感兴趣的特定文本的 div,然后点击后,我可以选择抓取 HTML 并将其保存在文件中,或者获取当前 url;两者都适合我的目的。由于可能有多个 div 包含所需的文本,因此我想要一种遍历每个文本并执行相同操作的方法。
这是我感兴趣的页面示例:
https://m.1xbet.co.ke/en/line/Football/
本例中的父元素是:#events-betting 并且嵌套是一个包含可点击 divs 的 li 标签列表。
I can either choose to scrape the HTML and save it in a file or get the current url
当然,解决方案是针对这个确切站点的,但是在进行网络抓取时,这又是很正常的。
casper.start('https://m.1xbet.co.ke/en/line/Football/', function () {
var links = casper.evaluate(function () {
$.expr[":"].contains = $.expr.createPseudo(function (arg) {
return function (elem) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
var links = [];
// Better to scrpape .events__title as it contains data-href attribute
$("#events-betting").find(".events__title:contains(World cup)").each(function (i, item) {
var lastPartOfurl = item.getAttribute("data-href");
lastPartOfurl = lastPartOfurl.split("/");
links.push("https://m.1xbet.co.ke/en/line/Football/" + item.getAttribute("data-champ") + "-" + lastPartOfurl[1]+'/');
})
return links;
});
console.log(links);
});
结果:
https://m.1xbet.co.ke/en/line/Football/1536237-FIFA-World-Cup-2018/,https://m.1xbet.co.ke/en/line/Football/1204917-FIFA-World-Cup-2018-Winner/,https://m.1xbet.co.ke/en/line/Football/1518431-FIFA-World-Cup-2018-Special-bets/,https://m.1xbet.co.ke/en/line/Football/1706515-FIFA-World-Cup-2018-Teams-Statistics-Group-Stage/