2011-04-26 30 views
2

我一直在研究解析來自WOW庫的一些數據,並且遇到了一些問題。當提到玩家收到的成就時,它會使用javascript來嘗試諸如#73:1283之類的字符串以顯示請求的信息。 (我創建了這個數字,但是請求的數據是這樣形成的)。如何在dom完成後解析由javascript加載的內容

  1. 是否有可能從需要JavaScript顯示其數據的頁面的數據?
  2. 如何解析dom準備完成或使用php完成後加載的網站的數據?
+0

你能給我們一個它在做什麼的代碼示例嗎?否則,爲了完全理解你所要求的內容,我們必須自己查看所有的WoW Armory代碼來弄清楚你的意思。網站在加載頁面後是否異步加載數據?或者當你點擊某個東西時它會發出AJAX呼叫?你確定它是Javascript本身的解釋字符串,而不是隻是發送請求到服務器的地方? – 2011-04-26 04:36:12

+0

'http://us.battle.net/wow/en/character/black-dragonflight/glitchshot/achievement#96:14861'是一個示例鏈接,你可以去看看我在說什麼。如果你禁用JavaScript,你將只能拉'http:// us.battle.net/wow/en/character/black-dragonflight/glitchshot/achievement'在這個頁面中,左邊的所有菜單必須與成就沒有使用HTML加載到DOM。您將無法使用啓用了javascript的菜單,但完整菜單的數據在那裏。 – Wes 2011-04-26 04:52:37

+0

問題是,您無法加載與使用javascript對應的menue項目的內容。我會承認,我不是最熟練的JS人,但看着源頭告訴我,它使用jQuery的組合,並有自己的內部JS來解釋鏈接。基於查看JS,我無法確定它從哪裏獲取數據。 – Wes 2011-04-26 04:54:35

回答

0

通過使用螢火蟲,我能看HTTP頭看到正在做出什麼AJAX調用產生這些網頁上的內容:http://us.battle.net/wow/en/character/black-dragonflight/glitchshot/achievement#96:14861http://us.battle.net/wow/en/character/black-dragonflight/glitchshot/achievement#96

它看起來頁面正在進行異步調用以加載此頁面:http://us.battle.net/wow/en/character/black-dragonflight/glitchshot/achievement/14861當散列之後的部分爲96:14861時,並且在散列之後的部分僅爲96時調用http://us.battle.net/wow/en/character/black-dragonflight/glitchshot/achievement/96。這兩個頁面都返回可以解析的XML呈現HTML。

所以一般來說,如果散列後面只有一個數字,只需將http://.../achievement/<number here>作爲URL即可。如果有兩個數字,請將第二個數字放在URL的末尾。

你需要做的,而不是拉動Javascript並解釋它,就是在PHP中自己對這些URL發出HTTP請求(例如使用cURL)並自行解析數據。

我真的很推薦學習JavaScript和jQuery,因爲要真正構建一個很好的網站來從WoW Armory獲取信息而不理解後臺正在進行的所有AJAX加載。

+0

我還沒有機會回到這個,但你是正確的。我的發現和你的一樣。感謝您的詳細回覆。我能夠解析包含找到相應頁面所需的全部信息的菜單。我理解足夠的JavaScript來使用jQuery並繞過一段時間,但我仍然使用服務器端PHP來完成骯髒的工作。 – Wes 2011-04-28 15:39:03

0

我建議您查看是否可以複製JavaScript中由PHP發送的查詢。雖然我不相信有一種方法可以在PHP中處理JavaScript,但肯定不是一種簡單或可擴展的方式。

我會嘗試掃描您使用PHP下載的第一頁的源代碼,以獲得您提到的那種格式的字符串。然後,如果他們網站上的JS正在查詢類似http://www.wow.com/armory.php?id=#72:1284的東西,那麼您可以下載下一個的源代碼。您可以通過FireBug或Chrome或Safari中的Inspector查找JS如何查詢服務器。

因此,在總結:

  1. 檢查找JS URL格式,如果你能複製它。
  2. 創建PHP來獲取主頁並提取所有字符串。
  3. 創建PHP以遍歷這些字符串並獲取這些頁面(使用JS請求的URL)。
  4. 做任何你想要的信息。
+0

'http://us.battle。net/wow/en/character/black-dragonflight/glitchshot/achievement#96:14861'是我與之合作的一個鏈接。如果您禁用JavaScript,則無法使用與成就對應的左側菜單,也無法檢索與每個菜單項對應的數據。我對JS並不熟練,所以我無法確定JS從哪裏獲取請求的頁面。 – Wes 2011-04-26 04:56:43

+0

看起來這個URL的數據來自'http:// us.battle.net/wow/en/character/black-dragonflight/glitchshot/achievement/14861'。所以你應該能夠在':'之後獲取URL的一部分,然後移除'#XX'並以編程的方式獲取你正在尋找的信息。 – joshhepworth 2011-04-26 16:25:53

0

您可以嘗試jQuery的$(文件).onready功能,這有助於 運行Java腳本代碼,當網頁加載起來。

<div id="wowoData">#4325325</div> 

<script> 
$(document).ready(
function(){ 
$("#wowoData").css("border","1px solid red"); 
} 

) 
</script> 
+0

現在,它正在成爲儀式,我正在解析PHP中的頁面。我曾考慮過使用JS來協助PHP解析一些內容,但是我並不熟悉JS,我正試圖將思路留給服務器端環境。 – Wes 2011-04-26 04:58:59

相關問題