简单的屏幕抓取使用jQuery

我一直在玩使用jQuery简单的屏幕刮板的想法,我想知道如果以下是可能的。

我有一个简单的HTML页面,并且正在尝试(如果可能的话)从其他页面获取所有列表项的内容,如下所示:

主页:

<!-- jQuery --> <script type='text/javascript'> $(document).ready(function(){ $.getJSON("[URL to other page]", function(data){ //Iterate through the <li> inside of the URL's data $.each(data.items, function(item){ $("<li/>").value().appendTo("#data"); }); }); }); </script> <!-- HTML --> <html> <body> <div id='data'></div> </body> </html> 

其他页面:

 //Html <body> <p><b>Items to Scrape</b></p> <ul> <li>I want to scrape what is here</li> <li>and what is here</li> <li>and here as well</li> <li>and append it in the main page</li> </ul> </body> 

那么,是否有可能使用jQuery从外部页面提取所有列表项内容,并将它们追加到div中?

使用$.ajax将其他页面加载到variables中,然后创build一个临时元素并使用.html()将内容设置为返回的值。 遍历节点types1的元素的子节点,并保留它们的第一个子节点的值。 如果外部页面不在您的Web服务器上,则需要使用您自己的Web服务器代理该文件。

像这样的东西:

 $.ajax({ url: "/thePageToScrape.html", dataType: 'text', success: function(data) { var elements = $("<div>").html(data)[0].getElementsByTagName("ul")[0].getElementsByTagName("li"); for(var i = 0; i < elements.length; i++) { var theText = elements[i].firstChild.nodeValue; // Do something here } } }); 
 $.get("/path/to/other/page",function(data){ $('#data').append($('li',data)); } 

如果这是相同的域然后没有问题 – jQuery解决scheme是好的。

但是,否则你不能访问任意网站的内容,因为这被认为是一种安全风险。 看到相同的来源政策 。

当然有服务器端的解决方法,如Web代理或CORS头 。 如果你幸运的话,他们会支持jsonp。

但是,如果你想要一个客户端解决scheme与任意网站和网页浏览器工作,那么你是运气不好。 有一个build议,放松这项政策 ,但这不会影响当前的网页浏览器。

你可能要考虑pjscrape:

http://nrabinowitz.github.io/pjscrape/

它允许你从命令行使用javascript和jQuery来做到这一点。 这是通过使用PhantomJS这是一个无头的webkit浏览器(它没有窗口,它只存在于您的脚本的使用,所以你可以加载复杂的网站使用AJAX,它将工作就像它是一个真正的浏览器) 。

这些例子是不言自明的,我相信这适用于所有平台(包括Windows)。

简单的与jQuery拼…

 // Get HTML from page $.get( 'http://example.com/', function( html ) { // Loop through elements you want to scrape content from $(html).find("ul").find("li").each( function(){ var text = $(this).text(); // Do something with content } ) } ); 

使用YQL或Yahoopipe道为原始页面html内容制作跨域请求。 雅虎pipe道或YQL查询将吐出作为一个JSON,可以由jquery处理提取和显示所需的数据。

缺点是:YQL和Yahoopipe道OBEY目标域的robots.txt文件,如果页面太长,则Yahoo Pipes regex命令将无法运行。