比如我想过滤的网页是   www.abc.com/index.do他里面的HTML里有一个DIV的内容我想要比如只要<div class="home-body"> ............. </div>  之中的东西吧这个要如何实现那??小弟看了半天PHP手册,以为要用XML里的函数来实现但是找了半天没研究出来请懂的大哥指点一下本人新手,多谢指点

解决方案 »

  1.   

    正则!至于正则怎么写 就得看你网页的内容具体分析了
    看下php的正则吧
      

  2.   


    大哥帮我看一下行吗?? 网页的HTML大约就是这样的
    <html>
    <body>................<div class="news-feed">.............</div>.................<script src="http://s.xnimg.cn/utm/urchin.js" type="text/javascript"></script>
    <script type="text/javascript">
    (function()
    {
    var id = XN.Cookie.get("id");
    if( id && id.slice(-1) == "6" )
    {
    _userv = 0;
    urchinTracker();
    }
    })();
    </script>
    <div id="wpiroot" class="hide"></div>
    <iframe id="imengine" name="imengine" src="http://wpi.renren.com/wtalk/ime.htm" frameBorder="0"  style="position:absolute;left:-1000pt;top:20pt;width:200pt;height:100pt;"></iframe><script>showtype = 1;
    bAtHome = 2;
    gCurPage = 0;
    var alldatanew={"count":0,"tcount":2};
    CampusInfo.buildNewRepInfo(1);</script>
    </body>
    </html>
      

  3.   

    忘了说了我只想要news-feed那个那个DIV里的,别的的不要
      

  4.   

    $str=file_get_contents("url");
    preg_match("/\<divs+class\=\"news\-feed\"\>(.*)\<\/div\>/",$str,$match);
    print_r(match);
    手机编辑的 没测试 思路就是这样 如果这个div中间还有嵌套的div就比较麻烦了
      

  5.   


    $str=file_get_contents("http://handanw.com");
    preg_match_all ("/(.*)/",$str,$matches);
    print_r($matches[0]);
    这个我写的能出东西,但是有好多数字
      

  6.   


    $str=file_get_contents("http://handanw.com");
    preg_match_all('/>(.*)</',$str,$matches);echo '<pre>';
    print_r($matches[0]);
    echo '</pre>';
      

  7.   


    我要的那个DIV里嵌套了好多DIV啊?? 这个用XML解析器好点吧??但是我看了半天手册还是不会用XML的函数
      

  8.   

    我这想实现是不是要用DOM啊?? 我是PHP5
      

  9.   


    建议你用 dom,或者这个simplehtmldom也行,类型jquery语法,比较容易用
    http://simplehtmldom.sourceforge.net/
      

  10.   


    大哥你能大概写2行让我能有个入手点吗??DOM里方法太多,看的我眼晕啊
      

  11.   


    $doc = DOMDocument::loadHTML( file_get_contents('http://www.abc.com/index.do') );
    $root = $doc->documentElement;
    $alldivs = $root->getElementsByTagName("div");
    for (var $i=0;$i<alldivs->length; $i++){
        $div = $alldivs->item($i);
        if ($div->hasAttribute('class') && $div->getAttribute('class')=='home-body'){
           echo $div->textContent;
        }
    }
      

  12.   

    dom或正则都可以,逻辑就是先用file_get_contents把网页抓过来,然后匹配字符串把它取出来。
    正则的话用这个应该就可以了。
    "/<div\s+class\s*=\s*[\"\']?news-feed[\"\']?[^>]*>([^<]*)<\/div>/is"dom的话更加严谨一些,对于有多层嵌套的html标签,其实还是用dom更好。
      

  13.   

    那请问楼上大哥效率上面DOM 好还是正则好啊??我要不要为了效率 放弃用好理解的DOM那??
      

  14.   

    效率应该差不多。dom也是把html标签一层层解析的,至于谁的效率快,就要看正则解析器快还是dom的解析器快。这点我也不清楚。建议如果只有这么一个页面,你用正则就可以了。如果有大量页面,还是用dom吧。正则毕竟没有那么严谨,页面多了可能会出现很多未知的不可预料的情况。
      

  15.   

    既然要用框架了,那就简单了吧,不管是jquery 还是其它的  你可以根据 div 的id 或是class 在JS 中取出来了!想怎么用就可以怎么用了吧! 
      

  16.   


    这方法我用了一下不行,DIV里的DIV会被搞没,好郁闷啊
      

  17.   

    我意思是我想要我那个DIV CLASS="NEWS-FEED" 里的所有HTML代码 的,不能少了DIV啊
      

  18.   


    我也是一瓶子不满 半瓶子晃荡
    参考一下这个吧:http://www.ibm.com/developerworks/cn/opensource/os-xmldomphp/
      

  19.   

    主要是这个 $doc = new DOMDocument();
    $doc->load( 'books.xml' );
    $books = $doc->getElementsByTagName( "book" );最后一行改成什么就跟JS一样了。。
      

  20.   

    学习下,php初学者,俺是学Java、的