小红书笔记无水印图片与视频解析的实现思路

把小红书分享链接解析成无水印的图片集或视频地址,核心只有一件事:拿到页面里内嵌的那段 JSON。以下按 PHP 示例梳理过程。

第一步:提取笔记 id

入口有两种:从 www.xiaohongshu.com 直接复制的链接里提 id;xhslink.com 短链则要先解析 header 或跟随重定向拿到真实地址再提。拿到 id 后拼出笔记页地址:https://www.xiaohongshu.com/discovery/item/{小红书id},后面提取 JSON 时这个 id 还要再用一次。

第二步:请求页面并截出 JSON

请求头里要带 cookie 和 Accept,两个值都从小红书登录后的网页版里复制。响应正文里 window.INITIAL_STATE= 后面跟着的就是要的 JSON,用正则把它截出来再反序列化:

preg_match('/window.__INITIAL_STATE__.+redmojiMap":{}}}}/',$html,$arr);
$arr = str_replace('window.__INITIAL_STATE__=' , "", $arr[0]);
$json = json_decode(str_replace('undefined' ,'null', $arr),true);

正则表达式为 /window.__INITIAL_STATE__.+redmojiMap":{}}}/。

第三步:图集地址

图片列表在 JSON 的 $json['note']['noteDetailMap'][$id]['note']['imageList'] 路径下,默认解析到的就是无水印地址,for 循环收进数组即可。

#示例代码
$images_num=count($json['note']['noteDetailMap'][$id]['note']['imageList']);
    for($i = 0; $i < $images_num; $i++){
        $ch[$i] = $json['note']['noteDetailMap'][$id]['note']['imageList'][$i]['infoList'][1]['url'];
    }

关键点:请求头的 Accept 必须包含 image/webp; 参数,缺了它拿到的图就带水印,建议直接照抄网页端的 Accept。

第四步:视频地址

视频不需要下载再处理,用 originVideoKey 直接拼原始地址。该字段位于 $json['note']['noteDetailMap'][$id]['note']['video']['consumer']['originVideoKey'],拼接规则:'https://sns-video-bd.xhscdn.com/' . {originVideoKey}。返回结构示例:

#示例代码
 $arr = array(
            'code' => 200,
            'msg' => '解析成功',
            'data' => [
                'author' => $json['note']['noteDetailMap'][$id]['note']['user']['nickname'],
                'uid' => $json['note']['noteDetailMap'][$id]['note']['user']['userId'],
                'avatar'=>$json['note']['noteDetailMap'][$id]['note']['user']['avatar'],
                'cover' => $ch[0],
                'like' => $json['note']['noteDetailMap'][$id]['note']['interactInfo']['likedCount'],
                'title' =>  $json['note']['noteDetailMap'][$id]['note']['desc'],
                'url' => 'https://sns-video-bd.xhscdn.com/' . $json['note']['noteDetailMap'][$id]['note']['video']['consumer']['originVideoKey'],
                ]
            );

注意事项

cookie 有时效,过期后请求会失败,需要定期更换;这套解析依赖页面结构,上游一改 window.INITIAL_STATE 的组织方式,正则和 JSON 路径都要跟着修,别当成稳定接口用。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容