Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Парсер


Автор: Lacoste1024 7.8.2012, 10:24
Здравствуйте, форумчане! Я пишу парсер на php. Структура парсируемых страниц следующая:
Код

<html>
<!-- Какой-то код -->
  <table>
    <tr>
      <td> ... </td>
      <td> Да</td>
    </tr>
    <tr>
      <td> ... </td>
      <td> Нет</td>
    </tr>
    <!-- Ещё множество таких же строк -->
  </table>

</html>


Мне нужно вывести только те строки, в которых содержится ячейка "Да". Я попытался что-то сделать, но честно говоря в php разбираюсь плохо и ничего не получилось
Код

<?php
    $html = file_get_contents("some_site");
    preg_match_all("/\<table\>/", $html, $tables);    

    for ($i = 0; $i < array_count_values($tables); $i++) {
        $show = preg_match("<td> Да</td>", $table[i]);
        if ($show) echo $table[i];
    }
?>

В file_get_contents я указывал существующий сайт. Здесь параметр этой функции я заменил.
P.S. Подскажите в чём проблема или (даже лучше) напишите код для моего случая.
Заранее спасибо!

Автор: etc 8.8.2012, 12:24
Lacoste1024,  юзай php simple html dom
там будет просто: 
Код

foreach($html->find('table') as $element) 
       echo $element->innertext . '<br>';

 

Автор: baldina 8.8.2012, 14:05
Код

$html = file_get_contents("some_site");
echo preg_replace ('|<tr>[^(?:Да)]*</tr>|u', '', $html);


Автор: s1lver 10.8.2012, 11:28
А если парсить все что содержится между конкретным тегом, а потом проверять что там находится. Если совпало с тем что нужно, то выводить на экран. 

Автор: etc 10.8.2012, 12:11
s1lver, 

для строки вида: <div>foo <b>bar</b></div>

при использовании библиотеки "php simple html dom"
Код

$var1 = 'Искомый текст';


foreach($html->find('div') as $element) 
       $var =  $element->plaintext;
//plaintext выводит голый текст удаляя все теги.


без этой библиотеки:

Код

preg_match('#<div>([^<]+)<b>([^<]+)</b></div>#U',$html,$list);
$var = $list[1].' '.$list[2];


выйдет результат "foo bar"

Код

//проверяем на соответствие
if (strcasecmp($var1, $var) == 0) {
    echo 'Строка найдена выводим её '.$var;
}


как то так.

Автор: sorymax 14.8.2012, 13:16
ОО! Как раз то, что я искал. Спасибо!

Автор: s1lver 16.8.2012, 09:26
Блин, ситуация...


Есть страница которая имеет два положения, в первом выводит сообщение в теге <h3>, во втором в <h2>. В зависимости от состояния необходимо получать текст из этих тегов.

Набросал:

Код

$url = 'http://';

$start = '<h3>';

$finish = '</h3>';

$content = file_get_contents($url);

$position = strpos($content, $start);

$content = substr($content, $position);
$position = strpos($content, $finish);

$content = substr($content, 0, $position);

$content = strip_tags($content);

if ($content == "TEXT")
{
    echo "OK";
}


а как можно обработать второй тег?  smile 

Автор: s1lver 16.8.2012, 09:54
Вот пришло на ум такое пока


Код

if ($position === false)
{
echo "Teg H3 not found";
} elseif ($position ==true)
{
echo "Teg H3 found";


 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)