当前位置:首页 > PHP教程 > php高级应用 > 列表

使用PHP抓取微博数据实现demo及原理解析

发布:smiling 来源: PHP粉丝网  添加日期:2023-09-16 16:07:52 浏览: 评论:0 

这篇文章主要为大家介绍了使用PHP抓取微博数据实现demo及原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪。

实现目标

1. 用户发布的微博内容;

2. 用户发布的时间;

3. 用户的名称; (这里我并没有获取)

使用的工具

voku/simple_html_dom  x-path

读取工具 (如果不知道怎么获取元素的xpath, 请百度这里不做赘述~)

安装:

composer require voku/simple_html_dom

实现的原理

当你去直接用file_get_contents去抓取微博的网页内容时, 你会被它的访客系统直接拦截, 所以直接用这个方法是不行的;

所以我采用了curl来获取. 当然,直接获取也是不行的, 所以我们要设置一下请求头, 微博对爬虫类的请求头是不会拒绝的,所以你可以直接抓取到网页;

请求头设置如下: 

'User-Agent: spider'

代码如下:

  1. // 通过这段代码你可以直接获取到微博的(HTML)网页 
  2.     public function curlGetWbData() 
  3.     { 
  4.         // 设置脚本超时时间 
  5.         set_time_limit(60); 
  6.         // 拉取微博地址 
  7.         $getWbUrl = "https://weibo.com/p/1005056447467552/home?profile_ftype=1&is_all=1#_0"
  8.         // 设置curl 请求头 
  9.         $header = [ 
  10.             'User-Agent: spider' 
  11.         ]; 
  12.         $ch = curl_init();                                              // 初始化curl 
  13.         curl_setopt($ch, CURLOPT_URL, $getWbUrl); 
  14.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  15.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    // 禁止 cURL 验证对等证书 
  16.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
  17.         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  18.         curl_setopt($ch, CURLOPT_HTTPHEADER, $header);            // 设置请求头 
  19.         $wbContent = curl_exec($ch); 
  20.         curl_close($ch); 
  21.         // 到这里我们就拿到了微博的网页 
  22.         return $wbContent
  23.     } 

拿到微博的网页内容之后, 我们就要对立面的数据进行提取, 因为并不是所有的数据我们都需要;

这里我们提取 微博内容 微博发布的时间; 现在需要使用x-path来进行提取;

x-path示例:

div[class='WB_cardwrap WB_feed_type S_bg2 WB_feed_like ']

代码如下:

  1. // 这个方法是 
  2. public static function actionAddWbData(string $wbContent, string $userID
  3.     $htmlDeal = new HtmlDomParser();    // 处理DOM的对象 
  4.     $htmlDeal->load($wbContent);        // 装载文本 
  5.     // 微博VIP和普通用户的class名不一致 
  6.     $wbHtml['normal'] = $htmlDeal->find("div[class='WB_cardwrap WB_feed_type S_bg2 WB_feed_like ']"); 
  7.     $wbHtml['vip']    = $htmlDeal->find("div[class='WB_cardwrap WB_feed_type S_bg2 WB_feed_vipcover WB_feed_like ']"); 
  8.     $wbNum = []; 
  9.     foreach ($wbHtml as $item => $key) { 
  10.         if (count($key) <= 0) { 
  11.             continue
  12.         } 
  13.         $wbNum[$userID][$item] = self::dealWbContent($key$userID); 
  14.     } 
  15.     Yii::info("抓取微博日志记录" . '----' . json_encode($wbNum)); 
  16.     return $wbNum

以上就是使用PHP抓取微博数据实现demo及原理解析的详细内容,更多关于PHP抓取微博数据的资料请关注脚本之家其它相关文章!

Tags: PHP抓取微博数据 PHP微博数据demo

分享到: