想用PHP抓取某网站库存数据

elancn 2014-05-06 10:10:28
想抓取这个网站的剩余库存数量
http://www.beibei.com/detail/105272.html
使用fopen(),然后再读取的源代码中,显示的库存量为0,查了资料说需要伪装HTTP,不知道怎么弄,在线等大牛~~~
...全文
154 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲雪星枫 2014-05-06
  • 打赏
  • 举报
回复
已解出:

<?php

// 获取页面内容
$content = file_get_contents('http://www.beibei.com/detail/105272.html');

// 获取hxcsrf
preg_match('/g.__t__ = \"(.*)\";/U', $content, $matches);
$hxcsrf = $matches[1];

// 获取id
preg_match('/pageData.encryptId = \'(.*)\';/U', $content, $matches);
$id = $matches[1];

// post 到 api 获取sku
$skuapi = 'http://www.beibei.com/item/detail/get_sku.html';

$postdata  =  http_build_query (
    array(
         'hxcsrf' => $hxcsrf,
         'id' => $id
     )
);

$opts  = array( 'http'  =>
    array(
         'method'   =>  'POST' ,
         'header'   =>  'Content-type: application/x-www-form-urlencoded' ,
         'content'  =>  $postdata
     )
);

$context = stream_context_create($opts);
$sku = file_get_contents($skuapi, false, $context);

$result = json_decode($sku, true);

echo '<meta http-equiv="content-type" content="text/html;charset=utf-8">';

echo '<pre>';
print_r($result);
echo '</pre>';

?>
Array ( [success] => 1 [data] => Array ( [sku_id_map] => Array ( [3] => Array ( [0] => 15 [1] => 16 [2] => 19 [3] => 20 [4] => 22 [5] => 458 [6] => 459 [7] => 468 ) ) [sku_kv_map] => Array ( [k3] => 颜色 [v15] => 大号B红 [v16] => 大号B黑 [v19] => 大号B绿 [v20] => 大号B粉 [v22] => 小号绿色 [v458] => 小号黑色 [v459] => 小号粉色 [v468] => 小号红色 ) [sku_stock_map] => Array ( [v15] => Array ( [id] => 61788 [stock] => 100 [price] => 9900 [origin_price] => 21800 ) [v16] => Array ( [id] => 61789 [stock] => 100 [price] => 9900 [origin_price] => 21800 ) [v19] => Array ( [id] => 61790 [stock] => 100 [price] => 9900 [origin_price] => 21800 ) [v20] => Array ( [id] => 61791 [stock] => 100 [price] => 9900 [origin_price] => 21800 ) [v22] => Array ( [id] => 61792 [stock] => 100 [price] => 8900 [origin_price] => 19800 ) [v458] => Array ( [id] => 61793 [stock] => 100 [price] => 8900 [origin_price] => 19800 ) [v459] => Array ( [id] => 61794 [stock] => 100 [price] => 8900 [origin_price] => 19800 ) [v468] => Array ( [id] => 61795 [stock] => 100 [price] => 8900 [origin_price] => 19800 ) [v0] => 800 ) ) )
elancn 2014-05-06
  • 打赏
  • 举报
回复
版主,里面的库存量用这个方法抓取到的是- 空的·····
一起混吧 2014-05-06
  • 打赏
  • 举报
回复
file_get_contents(); 获取源码后再用正则过滤。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧