Соскоб в Интернете с помощью PHP и HTML DOM Parser - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь очистить сайт внутри кода, но я бы сделал это в табличном формате.

$url='http://www.arbworld.net/en/moneyway';
    libxml_use_internal_errors( true );
    $dom=new DOMDocument;
    $dom->validateOnParse=false;
    $dom->recover=true;
    $dom->strictErrorChecking=false;
    $dom->loadHTMLFile( $url );
    libxml_clear_errors();


    $xp=new DOMXPath( $dom );
    $col=$xp->query('//table[@class="grid"]/tr[@class="belowHeader"]/td');

    if( $col->length > 0 ){
        foreach( $col as $node )echo $node->textContent;
    }

Теперь вывод такой:

Румынская лига I22. De c 18:00:00 FCSBUniversitat2.063.33.999.9% € 2070.1% € 00% € 0 € 207 22.De c 18:00:00 Итальянский сер ie A22.De c 11:30 : 00 AtalantaA C Милан1,8844,499,7% € 21 5580,1% € 170,2% € 46 € 21 622 22.De c 11:30:00 Engli sh Лига 221.De c 15: 0 0 : 00

1 Ответ

1 голос
/ 31 января 2020

Вы должны извлечь строки вместо столбцов (без /td в конце), а затем просто поместить все в таблицу HTML, с одним <tr> для каждой строки:

<?php
// your current code

$xp = new DOMXPath($dom);
$rows = $xp->query('//table[@class="grid"]/tr[@class="belowHeader"]');
?>

<table>
  <tbody>
  <?php foreach ($rows as $row): ?>
    <tr>
    <?php foreach ($row->childNodes as $col): ?>
      <?php if ($col->getAttribute('style') !== 'display:none'): ?>
        <?php foreach ($col->childNodes as $colPart): ?>
          <?php if ($colText = trim($colPart->textContent)): ?>
          <td><?= $colText ?></td>
          <?php elseif ($colPart instanceof DOMElement && $colPart->tagName === 'a'): ?>
            <?php
            $href = $colPart->getAttribute('href');
            if (strpos($href, 'javascript') !== 0):
            ?>
            <td><?= $colPart->getAttribute('href') ?></td>
            <?php endif ?>
          <?php endif ?>
        <?php endforeach ?>
      <?php endif ?>
    <?php endforeach ?>
    </tr>
  <?php endforeach ?>
  </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...