提问者:小点点

Web爬网网站返回空(使用preg_match_all)


我正在尝试拉所有的查询在这个页面中列出使用网络爬虫(代码如下)。 但我好像漏掉了什么。

我的代码如下:

<?php
    function getSslPage($url){
                    
       $ch = curl_init();      
       curl_setopt($ch, CURLOPT_URL, $url);
       curl_setopt($ch, CURLOPT_HEADER, 0);
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
       curl_setopt($ch, CURLOPT_COOKIEJAR,   "cookie.txt");
       curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
       curl_setopt($ch, CURLOPT_USERAGENT, "Chrome/36.0.1985.125");
           $login = curl_exec($ch);
           return $login;
   }
                        
       $milesfeed  = getSslPage('http://www.usmleforum.com/forum/index.php?forum=1'); 
       preg_match_all('/<td class="FootNotes2">(.*?)<\/td>/s',$milesfeed,$links);
                        
       $milesfeed_links=[]; 
       $milesfeed_text=[]; 
                        
       $fourth="abc";
       $third="abc";
   //$third="https://onemileatatime";
       foreach($links[1] as $miles){
                            
       $milesfeed_text[] = strip_tags($miles);
       preg_match_all('/<a target="_top" class="Links2" href="(.*?)">/s', $miles, $link);
       $milesfeed_links[] = strip_tags($link[1][0]); 
       $first=explode("://",$link[1][0]);
       $second=explode(".",$first[1]);
       //print_r($second);
                            
       if($second[0]!=$third || $third=="abc"){
           if($second[0]=="www"){
                 echo "<h3>".ucfirst($second[1])."</h3>";
           }else{
                 echo "<h3>".ucfirst($second[0])."</h3>";
           }
       }
        echo '<a href="'.$link[1][0].'" target="_blank">'.wordwrap(strip_tags($miles),30).'</a><br><br>';
           $third=$second[0]; 
      }
?>

我花了整整4个小时想自己搞清楚。 非常感谢任何帮助。。。


共1个答案

匿名用户

class=“footnotes2”不在tr中,而在td中,这可能会更改结果

编辑:

你的雷克赛在这种情况下是不对的。 您可以搜索,但在class=“footnotes2”之间,您还具有其他属性

是否将正则表达式更改为(.*?)<\/TD>可能会帮助您

您可以使用https://regex101.com/进行测试。 我删除了它中的curl响应并更改了regex以在那里测试它

再次编辑:

我托克更好地看了看你的代码,看了看你试图刮的网站。 但是您有办法解决代码中的许多错误。 在你的循环中,你的一个值存在而没有检查,然后,你尝试rexeg不存在于你试图刮取的页面中的值和模式。 复制该页面的html,并在正则表达式测试器中研究和测试它,还将结果var_dump到从函数返回的结果中,并编写检查以确保存在不需要使用的数据。 按部就班地这样做,你就会得到你的结果。