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

 更新时间:2023年05月30日 09:59:20   作者:Architecture  
这篇文章主要为大家介绍了使用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'

代码如下:

// 通过这段代码你可以直接获取到微博的(HTML)网页
    public function curlGetWbData()
    {
        // 设置脚本超时时间
        set_time_limit(60);
        // 拉取微博地址
        $getWbUrl = "https://weibo.com/p/1005056447467552/home?profile_ftype=1&is_all=1#_0";
        // 设置curl 请求头
        $header = [
            'User-Agent: spider'
        ];
        $ch = curl_init();                                              // 初始化curl
        curl_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_cardwrap WB_feed_type S_bg2 WB_feed_like ']

代码如下:

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

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

您可能感兴趣的文章:

相关文章

  • eaglephp使用微信api接口开发微信框架

    eaglephp使用微信api接口开发微信框架

    EaglePHP框架开发微信5.0的API接口,包含微信5.0 API基础接口、自定义菜单、高级接口,包括如下接收用户消息、向用户回复消息、会话界面自定义菜单、语音识别、客服接口等功能
    2014-01-01
  • Laravel源码解析之路由的使用和示例详解

    Laravel源码解析之路由的使用和示例详解

    这篇文章主要介绍了Laravel源码解析之路由的使用和示例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    这篇文章主要介绍了PHP设计模式:装饰器模式Decorator,结合实例形式分析了PHP装饰器模式Decorator相关概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • 体育彩票排列三组选三算法分享

    体育彩票排列三组选三算法分享

    这篇文章主要介绍了php实现体育彩票排列三组选三算法示例,根据用户投注的多个号码,拆成单注的数组形式
    2014-03-03
  • PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法

    PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法

    这篇文章主要介绍了PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法,一是使用stream_socket_client函数代替,二是写一个类似fsockopen功能的自定义函数,需要的朋友可以参考下
    2014-07-07
  • php while循环得到循环次数

    php while循环得到循环次数

    在for循环中,我们很容易得到循环次数,因为是作为条件出现的。在while也可以得到,如下:
    2013-10-10
  • 浅谈php命令行用法

    浅谈php命令行用法

    这篇文章主要介绍了浅谈php命令行用法的相关资料,需要的朋友可以参考下
    2015-02-02
  • PHP-FPM之Chroot执行环境详解

    PHP-FPM之Chroot执行环境详解

    在PHP-FPM中设立chroot,有很好的隔离作用,提高系统安全性,但是要想建立一个合理的PHP-FPM Chroot环境难度有点大,比用debootstrap等工具建立还要麻烦,这篇文章就详细介绍了PHP-FPM之Chroot执行环境,需要的朋友可以参考下。
    2015-08-08
  • 一个简单的PHP验证码实现代码

    一个简单的PHP验证码实现代码

    为提高网站安全性,登陆采用验证码是必不可少的。一款简单精致的PHP验证码应运而生!此验证码简洁美观,源码简单,可以自定义修改样式,是一款不错的验证码。
    2014-05-05
  • 6个超实用的PHP代码片段

    6个超实用的PHP代码片段

    这篇文章主要介绍了10个超实用的PHP代码样例:黑名单过滤、随机颜色生成器、从网上下载文件、强制下载文件、截取图片、检查网站是否宕机,需要的朋友可以参考下
    2015-08-08

最新评论