Как извлечь только определенные теги из документа HTML, используя PHP? - PullRequest
1 голос
/ 28 марта 2012

Я использую сканер для извлечения содержимого HTML определенных страниц в Интернете. В настоящее время у меня весь HTML хранится в одной переменной PHP:

$string = "".htmlspecialchars($crawler->results)."
\ п ";

Что я хочу сделать, это выбрать все теги "p" (например) и сохранить их в массиве. Как правильно это сделать?

Я попробовал следующее, используя xpath, но он ничего не показывает (скорее всего, потому что сам документ не является XML, я просто скопировал пример, приведенный в его документации).

$xml = new SimpleXMLElement ($string);

    $result=$xml->xpath('/p');
    while(list( , $node)=each($result)){
        echo '/p: ' , $node, "\n"; 
    }

Надеюсь, кто-то с (намного) большим опытом в PHP сможет мне помочь: D

Ответы [ 3 ]

3 голосов
/ 28 марта 2012

Попробуйте использовать DOMDocument вместе с DOMDocument :: getElementsByTagName .Рабочий процесс должен быть довольно простым.Что-то вроде:

$doc = DOMDocument::loadHTML(htmlspecialchars($crawler->results));
$pNodes = $doc->getElementsByTagName('p');

, который вернет DOMNodeList.

2 голосов
/ 28 марта 2012

Я голосую за использование регулярных выражений.Для тега p

preg_match_all('/<p>(.*)<\/p>/', '<p>foo</p><p>foo 1</p><p>foo 2</p>', $arr, PREG_PATTERN_ORDER);
if(is_array($arr))
{
 foreach($arr as $value)
 {
   echo $value."</br>";
 }
}
1 голос
/ 28 марта 2012

Проверьте простой HTML Dom.Он будет захватывать внешние страницы и обрабатывать их с довольно точной детализацией.

http://simplehtmldom.sourceforge.net/

Может использоваться следующим образом:

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
   echo $element->src . '<br>';
...