pjscrape和openStreetMap - 如何触发“更多结果”按钮?

时间:2015-12-05 19:09:11

标签: jquery web-scraping phantomjs

我正在使用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”函数。

有什么想法吗?

非常感谢!

1 个答案:

答案 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
});