Парсинг-извлечение данных с помощью php

Допустим, у нас есть следующая структура на веб-странице. Как я могу получить следующую информацию с помощью php? что-то XAXAXA-SASASASA 2-1 ZAZAZAZA-CACACACA 2-2

<th class='black' colspan='6'>something</th>
<tr class=''>
        <td bgcolor = '#272727' width = 40%>XAXAXA</td>
        <td bgcolor = '#272727'  width = '5%'> - </td>
        <td bgcolor = '#272727' width = '40%'>SASASASA</td>
        <td bgcolor = '#272727'  width = '5%'>2</td>
        <td bgcolor = '#272727'  width = '5%'> - </td>
        <td bgcolor = '#272727' width = '5%'>1</td>
    </tr>
<tr class=''>
        <td bgcolor = '#484848' width = 40%>ZAZAZAZA</td>
        <td bgcolor = '#484848'  width = '5%'> - </td>
        <td bgcolor = '#484848' width = '40%'>CACACACA</td>
        <td bgcolor = '#484848'  width = '5%'>2</td>
        <td bgcolor = '#484848'  width = '5%'> - </td>
        <td bgcolor = '#484848' width = '5%'>2</td>
    </tr>

person Nidis    schedule 20.02.2011    source источник
comment
у вас есть разрешение сайтов на использование их контента?   -  person    schedule 20.02.2011
comment
Извините, я не знал о принятых ответах. Да, у меня есть разрешение   -  person Nidis    schedule 21.02.2011


Ответы (3)


Вы можете использовать DOMDocument для этого, довольно просто:

$DOM = new DOMDocument();
$DOM->loadHTML($Content);
$TH = $DOM->getElementsByTagName("td");

foreach($TH as $Item)
{
    echo $Item->nodeValue;
}
person RobertPitt    schedule 21.02.2011

Вы можете использовать регулярное выражение для сопоставления с таким шаблоном. Функция preg_match() — хорошее место для начала.

person Dave Child    schedule 20.02.2011
comment
stackoverflow.com/questions/1732348/ - person RobertPitt; 21.02.2011

Я надеюсь, что вы примете ответ на этот раз! Просто вытащите спички групп с 1 по 13.

$sourcestring="your source string";
preg_match_all('/<th[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*).*?<td[^>]*>([^<]*)/is',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);

Результат:

    [0] => Array
        (
            [0] => <th class='black' colspan='6'>something</th>
<tr class=''>
        <td bgcolor = '#272727' width = 40%>XAXAXA</td>
        <td bgcolor = '#272727'  width = '5%'> - </td>
        <td bgcolor = '#272727' width = '40%'>SASASASA</td>
        <td bgcolor = '#272727'  width = '5%'>2</td>
        <td bgcolor = '#272727'  width = '5%'> - </td>
        <td bgcolor = '#272727' width = '5%'>1</td>
    </tr>
<tr class=''>
        <td bgcolor = '#484848' width = 40%>ZAZAZAZA</td>
        <td bgcolor = '#484848'  width = '5%'> - </td>
        <td bgcolor = '#484848' width = '40%'>CACACACA</td>
        <td bgcolor = '#484848'  width = '5%'>2</td>
        <td bgcolor = '#484848'  width = '5%'> - </td>
        <td bgcolor = '#484848' width = '5%'>2
        )

    [1] => Array
        (
            [0] => something
        )

    [2] => Array
        (
            [0] => XAXAXA
        )

    [3] => Array
        (
            [0] =>  - 
        )

    [4] => Array
        (
            [0] => SASASASA
        )

    [5] => Array
        (
            [0] => 2
        )

    [6] => Array
        (
            [0] =>  - 
        )

    [7] => Array
        (
            [0] => 1
        )

    [8] => Array
        (
            [0] => ZAZAZAZA
        )

    [9] => Array
        (
            [0] =>  - 
        )

    [10] => Array
        (
            [0] => CACACACA
        )

    [11] => Array
        (
            [0] => 2
        )

    [12] => Array
        (
            [0] =>  - 
        )

    [13] => Array
        (
            [0] => 2
        )
person Highly Irregular    schedule 21.02.2011
comment
stackoverflow.com/questions/1732348/ - person RobertPitt; 21.02.2011
comment
Я не понял вашего ответа. Можете ли вы сделать это более ясным? - person Nidis; 21.02.2011