概述
我正在尝试使用 PhantomJS 和 pjscrape 框架创建一个非常基本的刮板。
我的代码
pjs.config({
timeoutInterval: 6000,
timeoutLimit: 10000,
format: 'csv',
csvFields: ['productTitle','price'],
writer: 'file',
outFile: 'D:\\prod_details.csv'
});
pjs.addSuite({
title: 'ChainReactionCycles Scraper',
url: productURLs, //This is an array of URLs, two example are defined below
scrapers: [
function() {
var results [];
var linkTitle = _pjs.getText('#ModelsDisplayStyle4_LblTitle');
var linkPrice = _pjs.getText('#ModelsDisplayStyle4_LblMinPrice');
results.push([linkTitle[0],linkPrice[0]]);
return results;
}
]
});
使用的 URL 数组
第一个数组不起作用,并且在第三个或第四个 URL 之后失败。
var productURLs = ["8649","17374","7327","7325","14892","8650","8651","14893","18090","51318"];
for(var i=0;i<productURLs.length;++i){
productURLs[i] = 'http://www.chainreactioncycles.com/Models.aspx?ModelID=' + productURLs[i];
}
这第二个阵列可以工作并且不会失败,即使它来自同一个站点。
var categoriesURLs = ["304","2420","965","518","514","1667","521","1302","1138","510"];
for(var i=0;i<categoriesURLs.length;++i){
categoriesURLs[i] = 'http://www.chainreactioncycles.com/Categories.aspx?CategoryID=' + categoriesURLs[i];
}
问题
当遍历productURLs
PhantomJSpage.open
可选回调时,自动假定失败。即使页面尚未完成加载。
我知道这一点,因为我在运行 HTTP 调试器时启动了脚本,即使 PhantomJS 报告了页面加载失败,HTTP 请求仍在运行。
但是,使用categoriesURLs
.
假设
- 上面列出的所有 URL 都是有效的
- 我有最新版本的 PhantomJS 和 pjscrape
可能的解决方案
这些是我迄今为止尝试过的解决方案。
- 禁用图像加载
page.options.loadImages = false
- 设置较大显然没有用,因为生成的错误是
timeoutInterval
失败而不是超时失败。pjs.config
page.open
有任何想法吗?