Как бы я экран скрести страницу, как это, используя file_get_contents и preg_match? - PullRequest
0 голосов
/ 23 января 2012

У меня есть страница с множеством строк HTML, например:

<ul><li><a href='a_silly_link_that_changes_each_line.php'>the_content_i_need</a></li></ul>

Теперь, как вы видите, в этой строке есть ссылка, которая, к сожалению, меняется в каждой строке.

ИтакМне нужен способ очистки содержимого в этой строке, не позволяя ссылке помешать.

Я также пытался очистить, как это: .php'>(*.)</a></li></ul>, но это не хорошо, так как он возвращает многонежелательный контент.

Кроме того, поскольку на странице есть много строк, из которых мне нужно взять контент, могу ли я просто через loop пройти каким-то образом?

Я использую preg_match и file_get_contents но я открыт для других предложений.:)

Ответы [ 2 ]

0 голосов
/ 23 января 2012

От: PHP парсинг HTML код

Используйте что-то вроде:

   $str = '<ul><li><a src="test.html">linky</a></li></ul>';
   $DOM = new DOMDocument;
   $DOM->loadHTML($str);
   $items = $DOM->getElementsByTagName('ul');
    for($i =0;$i<$items->length;$i++){
        $ul = $items->item($i);
        $li=$ul->firstChild;
        if($li->nodeName=='li' && $li->firstChild->nodeName=='a'){
            //do something with $li->firstChild->nodeValue 

        }
    }

В этом случае $li->firstChild->nodeValue будет linky.

Это должно сделать это:)

0 голосов
/ 23 января 2012

Попробуйте использовать

$match = array();
preg_match_all( '~\\.php>(.*?)</a></li></ul>~', file_get_contents( $filename), $matches, PREG_SET_ORDER)`.

Это будет соответствовать всем ссылкам внутри вашего файла. *? означает «соответствовать символам 0-inf, но как можно меньшему числу символов» (жадный убийца), поэтому вы не получите никакого нежелательного контента.

...