【问题标题】:Scrapy with java content on a web server在 Web 服务器上使用 Java 内容进行抓取
【发布时间】:2016-05-06 06:04:15
【问题描述】:

我想从一个显然使用 javascript 生成表格的网站(该网站是 oddsportal.com)中抓取内容。

我看到 Scrapy 无法加载动态内容,我读到 selenium 可以处理它,但我打算使用 Web 服务器。

有没有一种方法可以解析这个站点或获取动态请求并使用 scrapy 解析它?

例如,我想从这个页面导入带有标题、比赛名称和赔率的完整表格

http://www.oddsportal.com/matches/handball/

【问题讨论】:

    标签: python scrapy web-crawler


    【解决方案1】:

    对于通过 AJAX 和 Javascript 提供动态内容的网站,我使用了PhantomJS。它不需要打开浏览器,因为它本身就是一个完全可编写脚本的网络浏览器。 PhantomJS 速度很快,包括对各种 Web 标准的原生支持,如 DOM 处理、CSS 选择器、JSON 和 Canvas。

    如果你不是 JavaScript Ninja,你应该看看 CasperJS,它是用 PhantomJS 编写的。它简化了定义完整导航场景的过程并提供了有用的高级功能。

    这里有一个关于 CasperJS 工作原理的示例:

    CasperJs and Jquery with chained Selects

    【讨论】:

      【解决方案2】:

      据我了解,您有一个限制,即您没有真正的显示器。你仍然可以使用 selenium - 有一个可以自动化的无头 PhantomJS browser,有一个在 virtual display 中工作的选项,你可以使用 远程 selenium 服务器docker-selenium .

      关于如何结合 selenium 和 scrapy 的例子有很多,例如:


      并且,还要检查scrapy-splash 中间件是否足以满足您的用例。

      【讨论】:

      • 那么最简单的选择是 Scrapy+PhantomJS+Selenium?
      • @GGA 是的,不过,我会先尝试 scrapy-splash,然后是 PhantomJS。
      • 谢谢,我会试试的,单独的scrapy-splash 就足以满足简单的一页请求了吗?
      • @GGA 基本上,它将通过独立的 js 引擎传递页面。有时处理动态页面解析就足够了。 PhantomJS 虽然是这里最直接的方法,但需要较少的设置。
      • 我将如何在服务器上使用 shell 和 docker 进行 scrapy-splash?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2017-10-05
      相关资源
      最近更新 更多