如何在PHP中刮取JavaScript值

时间:2014-06-15 05:10:25

标签: javascript php

我是PHP和编码的新手,我无法弄清楚这一点。我正试图从this profile page获得杀戮次数。

目前,我想要的字符串是:

29362

当我查看页面源时,这个数字无处可见。

但是,当我使用inspect元素时,我发现:

<td class="num">29362</td>

如何获取inspect元素中显示的内容而不是查看页面源所显示的内容?

3 个答案:

答案 0 :(得分:2)

在使用Firebug for Firefox或Safari和Chrome检查器等工具时,您可以看到在页面加载时会对数据进行一系列AJAX请求。虽然我没有深入挖掘这些请求返回的所有数据,但我确实看到了您正在寻找的数据中至少有一个:

http://uberstrike.com/profile/all_stats/631163 

因此,在页面加载时,JavaScript会将一系列AJAX请求返回给服务器以获取所有数据,然后它操纵DOM将其全部插入到视图中。

如果您愿意,您的PHP可以直接请求我粘贴的URL和json_decode响应。这将生成一个供您使用的数据结构,其中包含kills_all_time属性中的该数字。

快速而肮脏的例子:

<?php
$data_url = 'http://uberstrike.com/profile/all_stats/631163';

$serialized_data = file_get_contents($data_url);

$data = json_decode($serialized_data, true);

var_dump($data['kills_all_time']);

答案 1 :(得分:0)

我看了,看起来当前没有API,所以你最好的方法是做一个跨网络服务器的http请求。获取您想要的页面,然后从那里获得大量的字符串数学。

我建议使用字符串搜索来查找<td class="name">Kills</td>,并在其后面显示杀戮行。从那里它只是使用字符串数学提取数字。

答案 2 :(得分:0)

要添加JAAulde解释的内容,似乎有一种方法可以解决这些AJAX请求。它们都基于可在URL末尾找到的配置文件ID:

http://uberstrike.com/public_profile/631163

然后在Safari调试器(我正在使用的)中,您可以看到直接连接到API调用的这些XHR(XMLHttpRequest)请求:

enter image description here

然后查看其中的数据显示了一些非常好的格式化JSON。大!不刮!因此,只需浏览这些网址即可查看您可以看到的内容:

http://uberstrike.com/profile/items

http://uberstrike.com/profile/user_info/631163

http://uberstrike.com/profile/user_loadout/631163

http://uberstrike.com/profile/all_stats/631163

查看all_stats端点显示:

"kills_all_time":29362,

尼斯!

现在让我们像这样使用一些PHP json_decode

// Set the URL to the data.
$url = 'http://uberstrike.com/profile/all_stats/631163';

// Get the contenst of the URL via file_get_contents.
$all_stats_json = file_get_contents($url);

// Decode the JSON string with the 'true' optionso we get any array.
$all_stats_json_decoded = json_decode($all_stats_json, true);

// Dump the results for testing.
echo '<pre>';
print_r($all_stats_json_decoded);
echo '</pre>';

将转储这样的数组:

Array
(
    [headshots_record] => 24
    [nutshots_record] => 33
    [damage_dealt_record] => 6710
    [damage_received_record] => 31073
    [kills_record] => 50
    [smackdowns_record] => 45
    [headshots_all_time] => 4299
    [nutshots_all_time] => 1925
    [kills_all_time] => 29362
    [deaths_all_time] => 16491
    …

现在让kills_all_time做到这一点:

// Return the 'kills_all_time'.
echo $all_stats_json_decoded['kills_all_time'];

这给了我们:

  

29362