我将如何使用file_get_contents和preg_match屏幕抓取这样的页面?

时间:2012-01-22 22:46:02

标签: php screen-scraping preg-match file-get-contents

我有一个包含许多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_matchfile_get_contents,但我愿意接受其他建议。 :)

2 个答案:

答案 0 :(得分:0)

尝试使用

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

这将匹配文件中的所有链接。 *?表示“匹配0-inf字符但尽可能少的字符”(贪婪的杀手),这样您就不会得到任何未被破坏的内容。

答案 1 :(得分:0)

来自:PHP Parse HTML code

使用类似:

   $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

应该这样做:)