2011-04-26 94 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

相关问题