gpt4 book ai didi

javascript - 如何使用 phantomjs 抓取链接

转载 作者:可可西里 更新时间:2023-11-01 01:36:06 26 4
gpt4 key购买 nike

可以PhantomJS用作 BeautifulSoup 的替代品?

我正在尝试在 Etsy 上搜索并访问术语中的所有链接。在 Python 中,我知道如何做到这一点(使用 BeautifulSoup),但今天我想看看我是否可以用 PhantomJS 做同样的事情。我不会走得太远。

此脚本应在 Etsy 上搜索“hello kitty”并返回所有产品 <a class="listing-thumb" href=...></a>并在控制台中打印出来。理想情况下,我稍后会拜访他们并获得我需要的信息。现在它只是卡住。有什么想法吗?

var page = require('webpage').create();
var url = 'http://www.etsy.com/search?q=hello%20kitty';

page.open(url, function(status){
// list all the a.href links in the hello kitty etsy page
var link = page.evaluate(function() {
return document.querySelectorAll('a.listing-thumb');
});
for(var i = 0; i < link.length; i++){ console.log(link[i].href); }
phantom.exit();
});

我试过使用 CasperJS ,这可能是为此设计的更好。

最佳答案

PhantomJS evaluate() 不能序列化和返回像 HTMLElements 或 NodeLists 这样的复杂对象,所以你必须先将它们映射到可序列化的东西:

var page = require('webpage').create();
var url = 'http://www.etsy.com/search?q=hello%20kitty';

page.open(url, function(status) {
// list all the a.href links in the hello kitty etsy page
var links = page.evaluate(function() {
return [].map.call(document.querySelectorAll('a.listing-thumb'), function(link) {
return link.getAttribute('href');
});
});
console.log(links.join('\n'));
phantom.exit();
});

注意:这里我们使用 [].map.call() 来将 NodeList 视为标准的 Array

关于javascript - 如何使用 phantomjs 抓取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944518/

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