实现目标1.用户发布的微博内容;2.用户发帖时间;3.用户名称;(这里没弄到)用到的工具1.voku/simple_html_domx-path读取工具(不知道怎么获取元素的xpath的,这里就不要百度了~)安装:composerrequirevoku/simple_html_dom实现原理当你直接使用file_get_contents抓取微博网页内容时,会被它的访问者系统直接拦截,所以不能直接使用该方法;所以我用curl来获取它。当然直接获取是不行的,所以我们需要设置请求头。微博不会拒绝爬虫的请求头,可以直接爬取网页;请求头设置如下:'User-Agent:spider'代码如下://通过这段代码可以直接获取微博(HTML)网页publicfunctioncurlGetWbData(){//设置脚本超时时间设置时间限制(60);//拉取微博地址$getWbUrl="https://weibo.com/p/1005056447467552/home?profile_ftype=1&is_all=1#_0";//设置curl请求头$header=['User-Agent:spider'];$ch=curl_init();//初始化curlcurl_setopt($ch,CURLOPT_URL,$getWbUrl);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//禁止cURL验证对等证书curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);curl_setopt($ch,CURLOPT_HTTPHEADER,$header);//设置请求头$wbContent=curl_exec($ch);curl_close($ch);//这里获取微博的网页return$wbContent;}获取到微博的网页内容后,我们需要提取门面的数据,因为并不是所有的数据都需要;这里我们提取微博内容微博发布的时间;现在需要使用x-path来提取;x-path示例:div[class='WB_cardwrapWB_feed_typeS_bg2WB_feed_like']代码如下://用于处理DOM的对象$htmlDeal->load($wbContent);//加载文本//微博VIP和普通用户的类名不一致$wbHtml['normal']=$htmlDeal->find("div[class='WB_cardwrapWB_feed_typeS_bg2WB_feed_like']");$wbHtml['vip']=$htmlDeal->find("div[class='WB_cardwrapWB_feed_typeS_bg2WB_feed_vipcoverWB_feed_like']");$wbNum=[];foreach($wbHtmlas$item=>$key){if(count($key)<=0){继续;$wbNum[$userID][$item]=self::dealWbContent($key,$userID);}Yii::info("抓取微博日志记录".'----'.json_encode($wbNum));返回$wbNum;}
