我正在使用pjscrape从以下位置获取纬度数据:
http://www.openstreetmap.org/search?query=rossmann#map=19/50.53776/8.72757
和“my_config.js”代码是:
pjs.addSuite({
url: 'http://www.openstreetmap.org/search?query=rossmann#map=19/50.53776/8.72757',
nextPage: function () {
var next = $('.search_more');
if (next.length) {
next.click();
return true;
} else {
return false;
}
},
scraper: function() {
var result = []
var links = $('a')
lat = links.map(function(index, elem) {
return $(elem).attr("data-max-lat")
}).toArray()
result = result.concat(lat)
return result
}
});
我只得到前10个结果。如何在网页上触发“更多结果”按钮?
我看到了类似的例子:How to go to the next page for scraping in PhantomJS。我遵循逻辑,但它接缝我的“NextPage”功能仍然无法正常工作。另外,我不熟悉jquery,但是大部分代码都是我想要的,所以我想在jquery中修复“nextPage”函数。
有什么想法吗?
非常感谢!
答案 0 :(得分:1)
openStreetMap中实际上有一个基本的<a>
链接&#34;更多结果&#34;代码比你可以提供给pjscraper:
<a class="button load_more" href="/geocoder/...">More results</a>
根据docs,您必须使用moreUrls
选项将选择器提供给下一页。
此外,还有一个选项可以使用maxDepth
选项将搜索限制为给定数量的页面(如果您不怀疑scrape将永久运行并且结果仅在运行完成时返回)。
为了安全起见,我想也可以使用noconflict
选项。如果它打开,jQuery将在被抓取的页面上声明为_pjs.$
,而不是$
,因此如果其他一些脚本使用{{1},它将不会干扰页面的脚本变量。
所以,这个配置有效:
$
控制台输出结束:
pjs.addSuite({
url: 'http://www.openstreetmap.org/search?query=rossmann#map=19/50.53776/8.72757',
noConflict: true,
moreUrls : '.load_more',
scraper: function() {
var result = []
var links = _pjs.$('a')
lat = links.map(function(index, elem) {
return _pjs.$(elem).attr("data-max-lat")
}).toArray()
result = result.concat(lat)
return result
},
maxDepth: 5
});