博客列表 >php curl采集JD用户评论

php curl采集JD用户评论

有什么是忘不了的的博客
有什么是忘不了的的博客原创
2020年06月16日 19:12:111099浏览

先说一下我遇到的问题吧。

1、页面js报错,说'src'不存在。

2、拿到数据后json_decode()返回NULL。

解决:

   1、js报错,我在本地(环境下通过localhost访问的php文件),放到线上环境,报错消失。

    2、返回NULL,首先我们拿到数据不是纯json格式的,无法直接转换需要 去头去尾,并且编码格式也不是UTF-8的需要转码。

下面是我写的demo:

php文件:

<?php
        //访问的接口
        $url = $_POST['url'];
        //开始分页下标
        $offset = empty($_POST['offset'])?0:$_POST['offset'];
        //结束分页下标
        $id = $_POST['page'];
        if(!$url||!$id){
            echo '请输入必要信息';
            exit;
        }
        //去除你传入的url中的分页数,
        $leftNum =  strpos($url,'page=')+5;
        $rigetNum =  strpos($url,'&pageSize');
        $urlLeft =  substr($url,0,$leftNum);
        $urlRight = substr($url,$rigetNum);
      
   $i = $offset;
    header('Content-Type:text/html;charset=utf-8');
         
  while ($i<$id){
  //重新拼接访问url地址
        $url = $urlLeft . $i . $urlRight;
    $curl = curl_init();

    curl_setopt_array($curl, array(
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_POSTFIELDS => array('a' => '123','b' => '456'),
      CURLOPT_HTTPHEADER => array(
        "Cookie: JSESSIONID=768126C3E357B9D82367536A90FA697F.s1; jwotest_product=99"
      ),
    ));

    $output = curl_exec($curl);

    curl_close($curl);
    //这里的'fetchJSON_comment98'字符串你要自己看一下与可能不同。
    //去除得到的json数据的头部和尾部数据。得到一个和php可以转换的json数据。
     $output = str_replace('fetchJSON_comment98(', '', $output);
    $output = str_replace('}]});', '}]}', $output);
    //检查编码格式
    $encode = mb_detect_encoding($output, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));

    if($encode == 'UTF-8'){
        //echo $encode;
    }else{
        //编码转换,转成UTF-8
        $output = mb_convert_encoding($output, 'UTF-8', $encode);

    }
    //转码转成数组
    $result = json_decode($output, true);
    //判断是否是数组,防止空数据,下面的foreach保错。
   if(!is_array($result)){
        break; 
        }


    foreach ($result as $k=>$v){
        //数组里还有其他的一些杂数据,需要去除掉。我这个在以后的日子里不一定准,你要自己查看一下在做过滤。
     if (is_array($v)&&isset($v[0]['content'])) {
       foreach ($v as $key => $value) {
       //直接输出到页面上并换行
         echo $value['content']."<br/>";
         ///着里我是想存入文件的,需要可以打开,文件目录自己设置一下。
//         file_put_contents('static/log/log.txt',$value['content'].PHP_EOL,FILE_APPEND);
       }
     }
    }
    $i++;
  }

html页面:

<!DOCTYPE html>
<html>
<head>
        <meta charset="UTF-8">
        <title>Document</title>
</head>
<body>
        <form action="./index.php" method="POST" >
                <table>
                        <tr>
                                <td>网址</td>
                                <td><input type="text" name="url" placeholder="输入商品用户评论接口地址"  style="width: 300px"></td>
                        </tr>

                        <tr>
                                <td>开始页数</td>
                                <td><input type="text" name="offset" placeholder="输入开始的页数,默认为0"  style="width: 300px"></td>
                        </tr>
                        <tr>
                                <td>结束页数</td>
                                <td><input type="text" name="page" placeholder="输入结束的页数" style="width: 300px"></td>
                        </tr>
                        <tr>
                        <tr>
                                <td></td>
                                <td><input type="submit" value="提交"></td>
                        </tr>
                </table>
        </form>
</body>
</html>

它的评论接口我相信你可以自己通过f12搞到。。。

效果图:

((Y)_U2~[DW5EQ5DG1)1QKG.png



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议