京东商品评论接口数据抓取

阅读 (613)
根据京东详情页上调试看到京东的评论接口,虽然是jsonp格式,但是只要去掉头尾,还是可以转成我们要用的数据的

抓取过程中,遇到两个小问题:

1、请求头中没放Referer 和 User-Agent, 导致接口内容未返回

2、php 的 json_decode 解析失败,返回了NULL, 使用json_last_error(); 检查错误格式得出结果是 “5”, 经检查返回的接口数据内容的编码格式居然是 EUC-CN 导致json_decode失败

json_last_error错误msg对照表:
0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8

上采集代码: 

<?php
ini_set("display_errors", "On");//打开错误提示
ini_set("error_reporting",E_ALL);//显示所有错误

header("Content-Type: text/html; charset=utf-8");
$header = [];
$header[] = 'Referer: https://item.jd.com/59080455549.html';
$header[] = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36';

$url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv89&productId=59080455549&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=1';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$output = curl_exec($ch);
curl_close($ch);

$output = str_replace('fetchJSON_comment98vv89(', '', $output);
$output = str_replace('}]});', '}]}', $output);
$encode = mb_detect_encoding($output, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
if($encode == 'UTF-8'){
    echo $encode;
}else{
    $output = mb_convert_encoding($output, 'UTF-8', $encode);
}

$result = json_decode($output, true);
// echo json_last_error();
print_r($result);


exit;

本文仅供curl网络请求和PHP函数运用的学习使用,请勿对他人服务器发恶意请求,危害网络安全

更新于:2019-11-05 17:04:03
返回顶部