当前位置: 首页 > news >正文

php抓取运动步数,使用PHP抓取微博数据

实现目标

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

2. 用户发布的时间;

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

使用的工具

1. 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;

}


http://www.taodudu.cc/news/show-647739.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • php 网页截屏,怎么用PHP实现网页截图
  • thread php,php中关于线程thread的使用
  • cmf php,cmf公共函数解析-common.php
  • php 实现时时更新地图,PHP实现隔15分钟自动更新网站地图功能
  • php中显示不出图像,php – 无法显示图像,因为它包含错误
  • java后台日期怎么去重,JAVA后台业务实现去重
  • php stripos 返回值,php函数stripos详解
  • java中gc的认识,java JVM GC 笔记(个人对GC 或JVM 的了解)
  • java libpcap,Linux下编译安装libpcap
  • 网页实现人脸识别PHP,奇思妙想-用HTML5进行人脸识别
  • 文件包含漏洞不能包含php,ThinkPHP5漏洞分析之文件包含
  • php对应哪个oracle版本,Oracle 版本说明
  • php 主页子标题修改,关于有部分用户默认PC主页大标题标签修改无效的答疑.
  • 基于matlab的智能天线波束方向图仿真,基于MATLAB的智能天线波束方向图仿真
  • python中xlwt的局限,Python xlwt 生成Excel和设置特定单元格不可编辑
  • angularjs 导出excel php,AngularJS 导出Excel指令
  • php 连续点击事件,javascript设置连续两次点击按钮时间间隔的方法_javascript技巧...
  • oracle10g数据库热备份,Oracle10g数据库冷备份脚本文件
  • Oracle创建序列的sql语句,【Oracle学习】之 序列(Sequence)
  • cssd拉起oracle,oracle rac /etc/init.d/init.cssd startcheck
  • oracle dg状态查询,oracle dg状态检查及相关命令
  • keep alive PHP,vue中keep-alive使用方法详解
  • oracle库缓存锁,Laravel 7.10 中的数据库缓存锁定和并发限制
  • 源码时代php中级项目,PHP学科项目评比圆满结束
  • linux 进程管理 ppt,linux操作系统-进程管理和打印管理.ppt
  • linux c编程头文件,如何在Linux中找到C编程语言的头文件?
  • linux 脚本中除法运算符,Linux中Shell的算数运算符和位运算符用法笔记
  • linux程序获取透传参数,Linux内核中TCP SACK处理流程分析
  • Linux线程时间片如何修改,请教如何修改线程时间片
  • 安卓虚拟linux系统教程,在Linux上模拟Android应用程序的3种方法 | MOS86