立即注册  找回密码
 立即注册
CeraNetworksBGVM服务器主机交流会员请立即修改密码Sharktech防护
查看: 83|回复: 9

求助一个PHP Curl网页源码动态的问题

[复制链接]

求助一个PHP Curl网页源码动态的问题

[复制链接]

43

主题

260

回帖

865

积分

高级会员

积分
865
唐王李世民

43

主题

260

回帖

865

积分

高级会员

积分
865
2024-11-11 13:46:43 | 显示全部楼层 |阅读模式
先道声谢谢了。

视频演示:https://thumbsnap.com/qkDgKM5o

网址信息:https://www.toutiao.com/video/7418557232318513703/

我使用PHP的url获取一个网页的时候,它的网页内容一直在跳动,不能获取完整,我知道可能是使用了js动态创建的,但有技术或方法可以获取完整的内容吗?谢谢了

[ol]
  • /*
  • *  今日头条video页面的文件头
  • **/
  • function toutiao_html_header($url)
  • {
  •     $header = array(
  •         "Host: https://www.toutiao.com",
  •         "Referer: {$url}",
  •         "set-cookie: tt_webid=7421001700129736202; path=/; expires=Sun, 09 Feb 2025 04:22:07 GMT; domain=toutiao.com; secure; httponly",
  •         'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  •         'Accept-Language:zh-CN,zh;q=0.9,en;q=0.8',
  •         'cookie: ******************************************************************************',
  •         "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
  •     );
  •     return $header;
  • }
  • /**
  • * 模拟浏览器开始访问请求,这个用于今日头条视频的页面内容获取
  • */
  • function fetch_toutiao_video_html($url)
  • {
  •     $header = toutiao_html_header($url);
  •     $timeout = 40;
  •     $ch = curl_init($url);
  •     curl_setopt($ch, CURLOPT_FAILONERROR, true);
  •     //设置请求头信息
  •     #curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  •     curl_setopt($ch, CURLOPT_HEADER, $header);
  •     //不取得返回头信息
  •     #curl_setopt($ch, CURLOPT_HEADER, 0);
  •     // 关闭https验证
  •     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  •     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  •     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  •     curl_setopt($ch, CURLOPT_ENCODING, "");
  •     curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  •     curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  •     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  •     curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  •     curl_setopt($ch, CURLOPT_REFERER, $header[1]);
  •     curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  •     curl_setopt($ch, CURLOPT_USERAGENT, $header[6]);
  •     $content = curl_exec($ch);
  •     if (curl_errno($ch)) {
  •         echo 'Error:' . curl_error($ch);
  •     } else {
  •         return $content;
  •     }
  •     curl_close($ch);
  • }[/ol]复制代码
  • 回复

    使用道具 举报

    43

    主题

    260

    回帖

    865

    积分

    高级会员

    积分
    865
    唐王李世民 楼主

    43

    主题

    260

    回帖

    865

    积分

    高级会员

    积分
    865
    2024-11-11 14:13:30 | 显示全部楼层
    我查了网络上,有几个同样的问题

    1、https://wenku.csdn.net/answer/e12d12f453044ecf8d2a3959ec080971

    2、https://cloud.tencent.com/developer/ask/sof/104711852/answer/114173132

    3、https://cloud.tencent.com/developer/ask/sof/100838855

    我不太明白他们回复的方法,请教各位大佬们了,谢谢了
    回复

    使用道具 举报

    67

    主题

    288

    回帖

    1261

    积分

    金牌会员

    积分
    1261
    XSProMax

    67

    主题

    288

    回帖

    1261

    积分

    金牌会员

    积分
    1261
    2024-11-11 14:03:52 | 显示全部楼层
    太高端了 我不会
    回复

    使用道具 举报

    6

    主题

    423

    回帖

    932

    积分

    高级会员

    积分
    932
    qidian8

    6

    主题

    423

    回帖

    932

    积分

    高级会员

    积分
    932
    2024-11-11 14:21:19 | 显示全部楼层
    可以尝试使用Headless Chrome或Puppeteer来抓取动态生成的内容。
    回复

    使用道具 举报

    43

    主题

    260

    回帖

    865

    积分

    高级会员

    积分
    865
    唐王李世民 楼主

    43

    主题

    260

    回帖

    865

    积分

    高级会员

    积分
    865
    2024-11-11 14:22:16 | 显示全部楼层

    qidian8 发表于 2024-11-11 14:21

    可以尝试使用Headless Chrome或Puppeteer来抓取动态生成的内容。

    谢谢您的回复,在php中应该如何使用呢?
    回复

    使用道具 举报

    42

    主题

    113

    回帖

    1042

    积分

    金牌会员

    积分
    1042
    vikin

    42

    主题

    113

    回帖

    1042

    积分

    金牌会员

    积分
    1042
    2024-11-11 14:21:00 | 显示全部楼层
    这种动态的网页 我之前研究了很久你百度下:
    ChromeDriver抓取动态网页
    回复

    使用道具 举报

    1

    主题

    80

    回帖

    251

    积分

    中级会员

    积分
    251
    kpxyyyy

    1

    主题

    80

    回帖

    251

    积分

    中级会员

    积分
    251
    2024-11-11 14:35:44 | 显示全部楼层
    做爬虫要先分析网页的结构,而不是直接就写请求,现在的网站很多都是前后端分离动态加载。
    回复

    使用道具 举报

    1

    主题

    25

    回帖

    83

    积分

    注册会员

    积分
    83
    kof21411

    1

    主题

    25

    回帖

    83

    积分

    注册会员

    积分
    83
    2024-11-11 14:43:40 | 显示全部楼层
    你可以直接curl他的接口api拿内容
    回复

    使用道具 举报

    5

    主题

    36

    回帖

    241

    积分

    中级会员

    积分
    241
    imdong

    5

    主题

    36

    回帖

    241

    积分

    中级会员

    积分
    241
    2024-11-11 14:50:23 | 显示全部楼层
    你要获取页面内容不需要输出响应头信息
    把这段curl_setopt($ch, CURLOPT_HEADER, $header); 改成curl_setopt($ch, CURLOPT_HEADER, false);
    设置头信息函数里面可以把set-cookie相关代码删掉
    回复

    使用道具 举报

    1

    主题

    48

    回帖

    133

    积分

    注册会员

    积分
    133
    zhughe

    1

    主题

    48

    回帖

    133

    积分

    注册会员

    积分
    133
    2024-11-11 15:06:31 | 显示全部楼层
    python + playwright 轻松搞定,php只能通过浏览器分析接口,直接抓接口
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|小黑屋|HS2V主机综合交流论坛

    GMT+8, 2024-11-24 16:37 , Processed in 0.031617 second(s), 2 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表