我可以通过Firebug在网页的标题中粘贴一个jQuery javascript链接。然后,我可以运行脚本来抓取它以及它所链接的页面。如何用jQuery和XPath来抓取网页?
如何开始在jQuery或JavaScript中编写此脚本?在jQuery/Javascript中是否有一个接口,我可以使用XPath访问页面上的元素(以及它所链接的页面上的元素)?
我可以通过Firebug在网页的标题中粘贴一个jQuery javascript链接。然后,我可以运行脚本来抓取它以及它所链接的页面。如何用jQuery和XPath来抓取网页?
如何开始在jQuery或JavaScript中编写此脚本?在jQuery/Javascript中是否有一个接口,我可以使用XPath访问页面上的元素(以及它所链接的页面上的元素)?
您可以迅速获得页面的HTML:
var html = document.documentElement.innerHTML;
这只会返回一个字符串文字,它不会捕捉到根元素。
首先,您需要浏览器之外的JavaScript运行时。最常见的是Node.js.接下来,您需要一种方法来创建DOM客户端。这通常使用jsdom完成。
所以,你的脚本应该:
jsdom
这是否适合你,但你可以使用request)这是一个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
您可能会感兴趣的,网络刮建库正是这种目的(免责声明:这是我的项目)。它基于PhantomJS,这是一个可从命令行运行的无头Webkit实现,它具有非常简单的语法,用于从多个页面中抓取数据并查找其他网址以进行抓取和抓取。
谢谢。你的项目听起来有趣。我使用jQuery和Javascript的原因是,我试图抓取的页面受到登录保护。你认为这会起作用吗? – dangerChihuahua007 2012-03-18 22:10:45
你肯定可以使用PhantomJS来做这件事,但是可能没有一个好的办法可以用pjscrape做 - 但这取决于登录设置。另一个选择是使用Selenium,它实际上在一个开放的浏览器中运行 - 这使它能够处理非常复杂的登录操作。 – nrabinowitz 2012-03-19 03:30:11
谢谢,你有一个想法,我怎么能自动刮去它链接的页面呢? – dangerChihuahua007 2012-03-08 16:18:12
只需遍历子节点'',然后加载这些页面的内容。 – msanford 2012-03-08 16:30:36