我对JavaScript非常新,所以请耐心等待。 我一直在试图抓取一个网站并将所有产品网址列入一个列表,稍后我会在其他功能中使用这个网址:
url='https://www.fromuthtennis.com/frm/c-10-mens-tops.aspx'
var http = require('http-get');
var request = require("request");
var cheerio = require("cheerio");
function getURLS(url) {
request(url, function(err, resp, body){
var linklist = [];
$ = cheerio.load(body);
var links = $('#productResults a');
for(valor in links) {
if(links[valor].attribs && links[valor].attribs.href && linklist.indexOf(links[valor].attribs.href) == -1){
linklist.push(links[valor].attribs.href);
}
}
var extended_links = [];
linklist.forEach(function(link){
extended_link = 'https://www.fromuthtennis.com/frm/' + link;
extended_links.push(extended_link);
})
console.log(extended_links);
})
};
除非你转到第二页这样的项目,否则这确实有效:
url='https://www.fromuthtennis.com/frm/c-10-mens-tops.aspx#Filter=[pagenum=2*ava=1]'
var http = require('http-get');
var request = require("request");
var cheerio = require("cheerio"); //etc...
据我所知,这是因为页面上的内容是动态加载的。 要获取页面的内容,我相信我需要使用PhantomJS,因为这样我可以在页面完全加载后获取html代码,所以我安装了phantomjs-node模块。我想使用NodeJS来获取URL列表,因为我的其余代码都写在它上面。
我一直在阅读很多关于PhantomJS的内容,但使用phantomjs-node非常棘手,我仍然不明白如何使用它来获取URL列表,因为我对JavaScript或编码很新。 / p>
如果有人能引导我一点点,我会非常感激。
答案 0 :(得分:1)
是的,你可以。该页面看起来像是Google's Ajax Crawling URL。
基本上它允许网站为Google生成抓取内容的内容。每当您看到这样的网址时:
https://www.fromuthtennis.com/frm/c-10-mens-tops.aspx#Filter=[pagenum=2*ava=1]
您需要将其转换为:
https://www.fromuthtennis.com/frm/c-10-mens-tops.aspx?_escaped_fragment_=Filter%3D%5Bpagenum%3D2*ava%3D1%5D
转换只需采用基本路径:https://www.fromuthtennis.com/frm/c-10-mens-tops.aspx
,使用标准URI编码添加查询参数_escaped_fragment_
,其值为URL片段Filter=[pagenum=2*ava=1]
,编码到Filter%3D%5Bpagenum%3D2*ava%3D1%5D
。< / p>
您可以在此处阅读完整规范:https://developers.google.com/webmasters/ajax-crawling/docs/specification
注意:这不适用于所有网站,只适用于实施Google Ajax抓取网址的网站。但在这种情况下你很幸运
答案 1 :(得分:0)
使用此网址,您可以在不使用动态内容的情况下查看所需的任何产品:
https://www.fromuthtennis.com/frm/showproduct.aspx?ProductID= {PRODUCT_ID}
例如,查看产品37023:
https://www.fromuthtennis.com/frm/showproduct.aspx?ProductID=37023
您所要做的只是for(var productid=0;prodcutid<40000;productid++) {request...}
。
另一种方法是使用幻像模块。 (https://www.npmjs.com/package/phantom)。它将允许您直接从NodeJS应用程序运行幻像命令