PHP Simple Html Dom извлекает несколько тегов из одного класса - PullRequest
0 голосов
/ 19 мая 2018

Я новичок в использовании простого HTML-домена с php, и я изо всех сил пытаюсь извлечь несколько тегов HTML из одного класса.У меня есть несколько блоков HTML, как это на одной странице

    <div class="file-right"> 
         <a href="/secrets-of-the-millionaire-mind-tomocubcom-e17682584.html" class="ai-similar" data-id="17682584" data-loc="3">
           <h2><b>Secrets</b> of the <b>Millionaire</b> <b>Mind</b> - TOMOCUB.COM</h2>
         </a>
           <span class="fi-pagecount">223 Pages</span>
           <span class="fi-year">2005</span>
           <span class="fi-size hidemobile">1015 KB</span>
         </div>
     2 - <b>Secrets</b> of the <b>Millionaire</b> <b>Mind</b> and your achievement of <b>success</b>. As you’ve probably fo&nbsp;...
   </div> 

, и из каждого блока этот HTML-код, который я хочу извлечь

  1. ссылка href
  2. обычныйтекст в тегах
  3. каждый из трех элементов элемента span * text

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

$html = @str_get_html($response);
$allblocks=$html->find('div.file-right'); //this selects all file-right blocks
if(isset($allblocks)){
   foreach($allblocks as $singleblock){
      echo $singleblock->plaintext; // but i get an error here PHP Notice:  Array to string conversion

   }
}

Может кто-нибудь помочь мне, пожалуйста.

1 Ответ

0 голосов
/ 19 мая 2018

Вам нужно создать различные слои для разбора HTML, вы начали с поиска тега <div>.Из этого вы можете найти тег <a> в этом <div>, а затем получить атрибут href (используя ->href).В этом коде предполагается, что существует только один тег <a>, поэтому вместо foreach я просто говорю, используйте первый (используя [0]).

Теги <span> - это аналогичный процесс,но поскольку есть повторяющиеся элементы, на этот раз он использует foreach.Этот код выводит атрибут класса и содержимое диапазона.

$html = str_get_html($response);
$allblocks=$html->find('div.file-right'); //this selects all file-right blocks
if ( count($allblocks) > 0 ){
    foreach ( $allblocks as $block )    {
        $anchor = $block->find("a");
        echo "href=".$anchor[0]->href.PHP_EOL;
        echo "text=".$anchor[0]->plaintext.PHP_EOL;
        $spans = $block->find("span");
        foreach ( $spans as $span ) {
            echo "span=".$span->class."=".$span->plaintext.PHP_EOL;
        }
    }
}

Обратите внимание, что когда в исходном коде вы использовали isset($allblocks), в качестве строки перед установкой было задано его значение - даже если он не нашелвсе, что он все еще будет иметь значение.В этом коде я использую count(), чтобы проверить, возвращено ли что-либо предыдущим вызовом find().

С вашим примером HTML, заключенным только в минимальную страницу, вывод будет ...

href=/secrets-of-the-millionaire-mind-tomocubcom-e17682584.html
text=            Secrets of the Millionaire Mind - TOMOCUB.COM          
span=fi-pagecount=223 Pages 
span=fi-year=2005 
span=fi-size hidemobile=1015 KB 
...