刮取一个网页并通过点击按钮进行导航[英] Scrape a webpage and navigate by clicking buttons

问题描述

我想在服务器端执行以下操作:

1) 抓取网页
2)模拟对该页面的点击,然后导航到新页面.
3) 刮掉新页面
4)模拟新页面上的一些按钮点击
5)通过json或其他方式将数据发送回客户端

我正在考虑将它与 Node.js 一起使用.

但我对我应该使用哪个模块感到困惑
a) 僵尸
b) Node.io
c) Phantomjs
d) JSDOM
e) 其他的

我已经安装了 node,io 但无法通过命令提示符运行它.

PS:我在 windows 2008 服务器上工作

推荐答案

Zombie.js 和 Node.io 在 JSDOM 上运行,因此您可以选择使用 JSDOM(或任何等效的包装器)、无头浏览器(PhantomJS、SlimerJS) 或 Cheerio.

  • JSDOM 相当慢,因为它必须在 Node.js 中重新创建 DOM 和 CSSOM.
  • PhantomJS/SlimerJS 是合适的无头浏览器,因此性能还可以,也很可靠.
  • Cheerio 是 JSDOM 的轻量级替代品.它不会在 Node.js 中重新创建整个页面(它只是下载并解析 DOM - 不执行任何 javascript).因此,您不能真正点击按钮/链接,但抓取网页非常快.

鉴于您的要求,我可能会使用无头浏览器之类的东西.特别是,我会选择 CasperJS 因为它有一个很好的和富有表现力的 API,它快速可靠(它没有需要重新发明轮子来解析和渲染 dom 或 css,就像 JSDOM 一样)并且与按钮和链接等元素交互非常容易.

您在 CasperJS 中的工作流程应该大致如下所示:

casper.start();

casper
  .then(function(){
    console.log("Start:");
  })
  .thenOpen("https://www.domain.com/page1")
  .then(function(){
    // scrape something
    this.echo(this.getHTML('h1#foobar'));
  })
  .thenClick("#button1")
  .then(function(){
    // scrape something else
    this.echo(this.getHTML('h2#foobar'));
  })
  .thenClick("#button2")
  thenOpen("http://myserver.com", {
    method: "post",
    data: {
        my: 'data',
    }
  }, function() {
      this.echo("data sent back to the server")
  });

casper.run(); 

本文地址:https://www.itbaoku.cn/post/1739861.html