简单的html dom解析器表到数组(扩展)

时间:2016-07-02 23:44:33

标签: php arrays dom web-scraping html-table

有这个网站

http://www.oxybet.com/france-vs-iceland/e/5209778/

我想要的是刮掉整张桌子而不是这张桌子的部分。

例如,仅显示包含sportingbet stoiximan和mybet的行,并且我不需要所有列只有1 x 2列,也必须使用红色框或仅显示红色数字。这可以在scrape旁边的星号,或者我需要先在数据库上刮掉整个表然后查询数据库吗?

我现在得到的是这个代码,我在这个论坛上借用了另一个类似的问题:

<?php

require('simple_html_dom.php');


$html = file_get_html('http://www.oxybet.com/france-vs-iceland/e/5209778/');

$table = $html->find('table', 0);
$rowData = array();


foreach($table->find('tr') as $row) {
// initialize array to store the cell data from each row
$flight = array();

foreach($row->find('td') as $cell) {
    // push the cell's text to the array

    $flight[] = $cell->plaintext;
}
$rowData[] = $flight;
}

echo '<table>';
foreach ($rowData as $row => $tr) {
echo '<tr>'; 
foreach ($tr as $td)
    echo '<td>' . $td .'</td>';
echo '</tr>';
}
echo '</table>';

?>

返回完整的表格。我想要的主要是以某种方式检测红色框中选择的数字(在1 x 2区域)并在我的刮擦旁边显示一个星号,其次我想知道它是否可能刮掉特定的列和行而不是一切我需要使用xpath吗?

我请求有人指出我在这方面花费数小时的正确方向,手册并没有解释很多http://simplehtmldom.sourceforge.net/manual.htm

1 个答案:

答案 0 :(得分:0)

链接已经死了。但是,您可以使用xPath执行此操作,并通过颜色和顺序引用所需的单元格,以及更多方法。

这个片段会给你一般的要点;取自我正在研究的项目:

function __construct($URL)
{

    // make new DOM for nodes
    $this->dom = new DOMDocument();

    // set error level
    libxml_use_internal_errors(true);

    // Grab and set HTML Source
    $this->HTMLSource = file_get_contents($URL);

    // Load HTML into the dom
    $this->dom->loadHTML($this->HTMLSource);

    // Make xPath queryable
    $this->xpath = new DOMXPath($this->dom);
}

function xPathQuery($query){
    return $this->xpath->query($query);
}

然后只需将查询传递给DOMXPath,例如//tr[1]