Jquery HTML解析-从div内的表中获取数据?

Jquery HTML解析-从div内的表中获取数据?,jquery,html,json,parsing,screen-scraping,Jquery,Html,Json,Parsing,Screen Scraping,我对HTML解析/抓取的整个概念还比较陌生。我希望我能来这里得到我需要的帮助 基本上,我希望做的(我想)是指定我希望从中获取数据的页面的url。在本案中— 从那里,我想获取divid=snapshot\u表中的表class=listing 然后,我希望将该表嵌入到我自己的页面中,并在更新原始内容时进行更新 我已经阅读了Google和Stackoverflow上的一些其他帖子,我还看了一篇关于Netuts+的教程,但它似乎有点太多了,无法立即接受 希望这里有人能帮助我,让事情尽可能简单:) 干杯

我对HTML解析/抓取的整个概念还比较陌生。我希望我能来这里得到我需要的帮助

基本上,我希望做的(我想)是指定我希望从中获取数据的页面的url。在本案中—

从那里,我想获取divid=snapshot\u表中的表class=listing

然后,我希望将该表嵌入到我自己的页面中,并在更新原始内容时进行更新

我已经阅读了Google和Stackoverflow上的一些其他帖子,我还看了一篇关于Netuts+的教程,但它似乎有点太多了,无法立即接受

希望这里有人能帮助我,让事情尽可能简单:)

干杯

垫子

--编辑--

截至上午11:22(GMT+10)的当前代码

看看PHP

下一步,这将达到目的

$html = file_get_html('http://www.epgpweb.com/guild/us/Caelestrasz/Crimson/');
$table = $html->find('#snapshot_table table.listing');

我想我成功了,我学到了很多



是否要使用jQuery对网站执行抓取/解析?那么你需要一个服务器端代理,因为你不能通过AJAX从另一个域加载东西。表的内容实际上每周最多只更新3次,因此不必尽快更新。这听起来像是PHP使用CURL的工作。真的吗?我本以为我可以使用jQuery或类似的方法检索div中的数据,然后将其回送到我自己的网站上?这是更复杂的问题,还是我没有回答这个问题?这与我之前看到的类似。我在echo$表中添加了;尝试在页面上打印列表,但是它只返回单词数组。这是我犯的明显错误还是我遗漏了什么?是的,是;-)试试print\r($table)@Matthew Hood:你能把你的代码放在你最初的帖子里吗?显然出了什么问题。还可以尝试在->查找之后添加->纯文本。再次使用echo而不是print_r.mm,奇怪。。。你想通过什么方式来完成?如果你想在那个网站上获得排名,那你就错了。此列表使用AJAX动态加载。此链接包含JSON格式的列表:有很多方法可以做到这一点,但这些方法相当复杂。我建议您看看jQuery模板(googleit)。它们让解析JSON变得非常容易。Bozdoz,你,是,一头野兽!非常感谢!这比我想象的要多得多!你花了多长时间?19020913张赞成票!我想我花了半个小时。我知道的不多,但我喜欢回答这些问题作为自己学习的一种方式。它可能不是最漂亮的代码,但它可以工作。至少您不必“包含”任何其他外部代码。希望一切都有意义;我试图慷慨地给出代码注释,但就在一小时前,它对我来说还是陌生的。:)哈哈:)还有最后一个问题。一旦发布了一组新的分数,Ewout使用的URL就会过时。我刚刚又看了一眼原始页面()上的代码。如果跳入firebug并转到DOM,您可以在gaGlobal中看到,sid是URL末尾的数字。是否有可能抓取它并将其存储为变量,以便将最新的sid结果集加载到表中?这比预期的要困难得多。我真的不太知道如何获取会话ID;幸运的是,我注意到它正在从另一个页面中提取时间戳,在。我在Firebug的NET选项卡的XHR部分找到了它,顺便说一句:)
$html = file_get_html('http://www.epgpweb.com/guild/us/Caelestrasz/Crimson/');
$table = $html->find('#snapshot_table table.listing');
<?php
//Get the current timestamp
$url = 'http://www.epgpweb.com/api/snapshot/us/Caelestrasz/Crimson';
$url = file_get_contents($url);
$url = substr($url,-12,10); 

//Get the member data based on the timestamp
$url = 'http://www.epgpweb.com/api/snapshot/us/Caelestrasz/Crimson/'.$url;
$url = file_get_contents($url);

//Convert the unicode to html entities, as I found here: http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-char
function replace_unicode_escape_sequence($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
$url = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $url);

//erase/replace the insignificant parts, to put the data into an array
function erase($a){
    global $url;
    $url = explode($a,$url);
    $url = implode("",$url);
}
function replace($a,$b){
    global $url;
    $url = explode($a,$url);
    $url = implode($b,$url);    
}
replace("[[",";");
replace("]]",";");
replace("],",";");
erase('[');
erase('"');
replace(":",",");
$url = explode(";", $url);

//lose the front and end bits, and maintain the member data
array_shift($url);
array_pop($url);

//put the data into an array
foreach($url as $k=>$v){
    $v = explode(",",$v);
    foreach($v as $k2=>$v2){
        $data[$k][$k2] = $v2;
    }
    $pr = round(intval($data[$k][1]) / intval($data[$k][2]),3);
    $pr = str_pad($pr,5,"0",STR_PAD_RIGHT);
    $pr = substr($pr, 0, 5);
    $data[$k][3] = $pr;
}

//sort the array by PR number
function compare($x, $y)
{
if ( $x[3] == $y[3] )
 return 0;
else if ( $x[3] > $y[3] )
 return -1;
else
 return 1;
}
usort($data, 'compare');

//output the data into a table
echo "<table><tbody><tr><th>Member</th><th>EP</th><th>GP</th><th>PR</th></tr>";
foreach($data as $k=>$v){
    echo "<tr>";
    foreach($v as $v2){ 
        echo "<td>".$v2."</td>";
    }
    echo "</tr>";
}
echo "</tbody></table>";
?>