【问题标题】:How can one scrape a web page with jQuery and XPath?如何使用 jQuery 和 XPath 抓取网页?
【发布时间】:2012-03-08 15:32:47
【问题描述】:

我可以通过 Firebug 在网页的标题中粘贴一个 jQuery javascript 链接。然后,我可以运行一个脚本来抓取它以及它链接到的页面。

我一般如何开始用 jQuery 或 javascript 编写这个脚本? jQuery/Javascript 中是否有一个接口,我可以使用 XPath 访问页面上的元素(以及它链接到的页面上)?

【问题讨论】:

    标签: javascript jquery xpath web-scraping


    【解决方案1】:

    首先,您需要浏览器之外的 JavaScript 运行时。最常见的是 Node.js。接下来,您需要一种方法来创建 DOM 客户端。这通常使用jsdom 完成。

    所以,你的脚本应该:

    1. 下载 html 页面(jsdom 为您执行此操作,但您可以使用 request
    2. 创建客户端 DOM
    3. 使用 jQuery 解析

    这是一个示例 Node.js 脚本:

    var jsdom = require("jsdom");
    
    jsdom.env("http://nodejs.org/dist/", [
        'http://code.jquery.com/jquery-1.5.min.js'
      ], function(errors, window) {
      console.log("there have been", window.$("a").length, "nodejs releases!");
    });
    

    你可以像这样运行它:

    $ node scrape.js
    

    别忘了先安装jsdom

    $ npm install --production jsdom
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式快速获取页面的 HTML:

      var html = document.documentElement.innerHTML;
      

      这只会返回一个字符串文字,它不会捕获根元素。

      【讨论】:

      • 谢谢,您知道如何自动抓取它链接到的页面吗?
      • 只需遍历子<a/>s,然后也加载这些页面的内容。
      【解决方案3】:

      您可能对pjscrape 感兴趣,这是一个专门为此目的而构建的网络抓取库(免责声明:这是我的项目)。它基于PhantomJS,一个可以从命令行运行的无头Webkit 实现,它有一个非常简单的语法,可以从多个页面抓取数据并找到额外的url 以进行蜘蛛和抓取。

      【讨论】:

      • 谢谢。你的项目听起来很有趣。我使用 jQuery 和 Javascript 的原因是我试图抓取的页面是受登录保护的。你认为这会奏效吗?
      • 您绝对可以使用 PhantomJS 来实现这一点,但使用 pjscrape 可能还没有一个很好的方法——这取决于登录设置。另一种选择是使用 Selenium,它实际上在一个打开的浏览器中运行 - 这使它能够处理非常复杂的登录操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多