gpt4 book ai didi

node.js - 使用 phantomJS 和 NodeJS 进行抓取

转载 作者:太空宇宙 更新时间:2023-11-03 23:09:18 26 4
gpt4 key购买 nike

我正在遵循此处列出的教程:

http://code.tutsplus.com/tutorials/screen-scraping-with-nodejs--net-25560

当我运行代码时:

  var host = 'http://www.shoutcast.com/?action=sub&cat=Hindi#134';
var phantom = require('phantom');
phantom.create(function(ph) {
return ph.createPage(function(page) {
return page.open(host, function(status) {
console.log("opened site? ", status);

page.injectJs('http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js', function() {
//jQuery Loaded.
//Wait for a bit for AJAX content to load on the page. Here, we are waiting 5 seconds.
setTimeout(function() {
return page.evaluate(function() {

//Get what you want from the page using jQuery. A good way is to populate an object with all the jQuery commands that you need and then return the object.
console.log(document.getElementsByClassName('transition')[0]);

return document.getElementsByClassName('transition')[0];



}, function(result) {
console.log(result);
ph.exit();
});
}, 5000);

});
});
});
});

我收到以下错误:

phantom stdout: ReferenceError: Can't find variable: $


phantom stdout: phantomjs://webpage.evaluate():7
phantomjs://webpage.evaluate():10
phantomjs://webpage.evaluate():10

我不知道这意味着什么,也没有关于如何解决它的帮助......如何解决这个问题?

基本上,我想要所有带有类转换的“a”标签,这些标签来 self 正在抓取的网站。所有这些标签都在网站上异步加载。

最佳答案

$ 是由于 jQuery 和可能的冲突造成的。您几乎不需要注入(inject) jQuery,只是为了使用 transition 类来抓取“a”标签。您始终拥有 document.querySelectordocument.querySelectorAll

var host = 'http://www.shoutcast.com/?action=sub&cat=Hindi#134';
var phantom = require('phantom');

phantom.create(function(ph) {
ph.createPage(function(page) {

page.open(host, function(status) {

console.log("opened site? ", status);
//Wait for a bit for AJAX content to load on the page. Here, we are waiting 5 seconds.
setTimeout(function() {

page.evaluate(function() {
// here you need to add more code to get the html/text
// more code incase you use querySelectorAll
return document.document.querySelector('a.transition');
//return document.document.querySelectorAll('a.transition');
},

function(result) {
console.log(result);
ph.exit();
});

}, 5000);

});
});
});

但是,我无法理解 function (result) { console.log(result); 的方式...} 已编码。我不知道 page.evaluate 是否将回调函数作为第二个参数。请检查文档。

关于node.js - 使用 phantomJS 和 NodeJS 进行抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21855241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com