2016-04-15 15 views
2

まず、PhantomJとそのnpmインターフェイスphantomの両方を正常にインストールしました。新しい構文でページを読み込むようにコードを設定しました(ここに掲載されているその他の質問はすべて古いコードの構文に基づいていますが、何か不足しています)。 this is the source I'm trying to scrapenodejsとphantomjsを使用した動的スクレイピング

右サイドバー、「Comune」の近くにある偽の選択肢ともう1つは動的に生成され、なぜphantomjsがそれらを拾っていないのか理解できません。私のコードに従う:

var sito = "http://bicincitta.tobike.it/"; 
var sitepage = null; 
var phInstance = null; 
var phantom = require('phantom') 

phantom.create() 
    .then((instance) => { 
    phInstance = instance; 
return instance.createPage(); 
}) 
.then((page) => { 
    sitepage = page; 
return page.open(sito); 
}) 
.then((status) => { 
    console.log(status); 
return sitepage.property('content'); 
}) 
.then((content) => { 
    console.log(content); 
sitepage.close(); 
phInstance.exit(); 
}) 
.catch((error) => { 
    console.log(error); 
phInstance.exit(); 
}) 

私は今、壁に激しく頭を打っています。サイトのスクリプトを何らかの形で入手して実行するはずですか?私は命令を欠いていますか?

また、脇の下に;ページが2番目の ".then"の内側にスコープがあれば、ページに追加のメソッドをどのように連結するべきかは、実際には明確ではありません。

答えて

1

PhantomJSで過去1週間の作業を費やして、角度でレンダリングされたデータを含むページをスナップショットとして取得しようとしました。私が見つけた最も簡単なことは、ローカルスクリプトにはpage.injectJs('../script.js')、外部スクリプトにはpage.includeJs('http://jquery.com...')を使用することでした。 Phantomはサンドボックス化されているので、実行するJSを指定しない限り、キャプチャしているページでjavascriptを実行しません。これにより、javascriptでレンダリングされたデータを持つページをスクリーンショットすることができます。

1

ファントムで解析できないhtmlの下にCDataスクリプトがあります。これはアイテムが伝播される場所です。

<script type="text/javascript"> 
//<![CDATA[ 
Sys.Application.initialize(); 
Sys.Application.add_init(function() { 
    $create(Telerik.Web.UI.RadAjaxManager, {"_updatePanels":"","ajaxSettings":[],"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"defaultLoadingPanelID":"","enableAJAX":true,"enableHistory":false,"links":[],"styles":[],"uniqueID":"RadAjaxManager1","updatePanelsRenderMode":0}, null, null, $get("RadAjaxManager1")); 
}); 
Sys.Application.add_init(function() { 
    $create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"","styles":[],"uniqueID":"ajCheckLoginUser"}, null, null, $get("ajCheckLoginUser")); 
}); 
Sys.Application.add_init(function() { 
    $create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"","styles":[],"uniqueID":"ajCheckLoginAdmin"}, null, null, $get("ajCheckLoginAdmin")); 
}); 
Sys.Application.add_init(function() { 
    $create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"","styles":[],"uniqueID":"ajLogoutUser"}, null, null, $get("ajLogoutUser")); 
}); 
Sys.Application.add_init(function() { 
    $create(Telerik.Web.UI.RadWindow, {"_dockMode":false,"behaviors":0,"clientStateFieldID":"radPortal_ClientState","destroyOnClose":true,"formID":"form1","height":"180px","iconUrl":"","left":"","minimizeIconUrl":"","modal":true,"name":"radPortal","reloadOnShow":true,"showContentDuringLoad":false,"skin":"Office2007","top":"","visibleStatusbar":false,"width":"450px"}, {"close":OnClientClosePortal}, null, $get("radPortal")); 
}); 
Sys.Application.add_init(function() { 
    $create(Telerik.Web.UI.RadWindowManager, {"behaviors":4,"clientStateFieldID":"windowManagerPortal_ClientState","destroyOnClose":true,"formID":"form1","iconUrl":"","left":"","minimizeIconUrl":"","modal":true,"name":"windowManagerPortal","reloadOnShow":true,"showContentDuringLoad":false,"skin":"Office2007","top":"","visibleStatusbar":false,"windowControls":"['radPortal']"}, null, {"child":"radPortal"}, $get("windowManagerPortal")); 
    }); 
//]]> 
</script> 

これらのアイテムは、このサイトサーバーとの通信を離れるとすぐに破棄されます。これを回避する方法はありますが、何かを試してみる方が良いと思います。私はCDATAのHTMLをロードするためにnpm cheerioを使用しました

関連する問題