PHP 闲鱼爬虫漫游指南

智能家电 2025-10-10 广盈财人 3878

把「二手商品详情」搬进 Excel 的零登录方案

关键词:PHP、闲鱼、爬虫、商品详情、代码示例、合规、CSV/Excel

适合:运营、学生、羊毛党、一切「不会 Python 但会用 Excel」的同学

一、为什么写这篇「软」文?

老板要「闲鱼竞品均价」——人工滑屏 300 条,眼花了

Java/Python 成本高——PHP 开箱即用,虚拟主机就能跑

封号吓破胆——只爬「游客可见」字段,零登录,零滑块

今天带你走「公开接口 + PHP 原生」阳关道:

单文件 60 行,虚拟主机可部署,CSV 导出直接透视图!

二、技术选型:为什么选「公开游客接口」

wKgZPGjk1JOANgzUAAA4HhKp120390.png

结论:只采「游客可见」信息——标题、价格、所在地、浏览量、想要数,不碰聊天记录,才能长期安稳。

三、5 分钟环境:一条命令全装好

bash

# 任意 PHP≥7.2 即可
# 依赖:零!原生 curl + json + fopen 足够

虚拟主机、宝塔、XAMPP、WAMP 通杀,连 Composer 都不用

四、核心思路:两步拿到商品 JSON

搜索页→拿 itemId(正则即可)

详情页→/json.htm→结构化数据

示例 URL(官方公开,无需 Cookie):

https://g-acs.m.goofish.com/h5/mtop.taobao.idle.awesome.itemdetail/1.0/?data={"itemId":"776721774669"}

返回片段:

JSON

{"data":{"components":{"itemInfo":{"title":"佳能 AE-1 胶片机","price":"1180","location":"杭州","viewCount":"1283","wantCnt":"23"}}}}

五、60 行完整源码:搜索 + 详情 + CSV 一条龙

保存为 xianyu.php,命令行 php xianyu.php 即可跑:

php

#!/usr/bin/env php
< ?php
/* 闲鱼公开接口爬虫 - 零依赖版 */
$key = $argv[1] ?? readline("请输入关键词:");
$maxPage = (int)($argv[2] ?? 3);          // 先跑3页约60条
$csvFile = "闲鱼_{$key}_".date('Ymd').".csv";
$fp = fopen($csvFile, 'w');
fputcsv($fp, ['itemId', 'title', 'price', 'location', 'want', 'view', 'updated']);

$searchUrl = "https://s.goofish.com/h5/searchPub/data?query=%s&page=%s&pageSize=20";
$detailUrl = "https://g-acs.m.goofish.com/h5/mtop.taobao.idle.awesome.itemdetail/1.0/?data=%s";

$userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X)';

for ($page = 1; $page <= $maxPage; $page++) {
    // ① 搜索页
    $searchJson = http_get(sprintf($searchUrl, urlencode($key), $page), $userAgent);
    $list = json_decode($searchJson, true)['data']['listItem'] ?? [];
    if (!$list) break;

    foreach ($list as $it) {
        $itemId = $it['itemId'] ?? '';
        if (!$itemId) continue;

        // ② 详情页
        $detailJson = http_get(sprintf($detailUrl, urlencode(json_encode(['itemId' = > $itemId]))), $userAgent);
        $info = json_decode($detailJson, true)['data']['components']['itemInfo'] ?? [];
        if (!$info) continue;

        // ③ 写入CSV
        fputcsv($fp, [
            $itemId,
            $info['title'] ?? '',
            (float)str_replace(',', '', $info['price'] ?? '0'),
            $info['location'] ?? '',
            (int)($info['wantCnt'] ?? 0),
            (int)($info['viewCount'] ?? 0),
            date('Y-m-d H:i:s')
        ]);
        usleep(200000); // 0.2s 礼貌限速
    }
    echo "Page {$page} 完成n";
}

fclose($fp);
echo "共导出 " . (count(file($csvFile)) - 1) . " 条 → {$csvFile}n";

/* -------------- 原生 http_get -------------- */
function http_get($url, $ua) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => ["User-Agent: $ua"],
        CURLOPT_TIMEOUT        => 15,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false,
    ]);
    $resp = curl_exec($ch);
    curl_close($ch);
    return $resp ?: throw new Exception("CURL失败");
}
?>

运行截图:

$ php xianyu.php "佳能AE-1" 3
Page 1 完成
Page 2 完成
Page 3 完成
共导出 60 条 → 闲鱼_佳能AE-1_20250929.csv

Excel 打开 → 透视图 → 均价/区域热度一目了然。

六、提速 & 稳速:并发 + 重试 + 礼貌策略

进阶:一行命令装Guzzle:composer require guzzlehttp/guzzle,把http_get换成GuzzleClient,即可HTTP2+连接池。

七、三行代码看行情(Excel透视)

均价 =AVERAGE(C:C)

最低地区透视图 → 低价收货

浏览/想要比 → 判断“真假热销”

八、常见问题(FAQ)

403怎么办?→把usleep调到0.5s,或加Accept-Language

想要图文详情?→游客接口无图,需登录版(高风险,本文不展开)

一天能采多少?→单IP1w次+无封号;分布式再+代理

能商用吗?→只采“游客可见”字段,无明文禁止;对外展示请脱敏itemId后三位

九、把脚本升级成“副业现金流”

wKgZPGjk1MWAU-0nAAAxuNAeS_I829.png

已有读者把“闲鱼行情”做成星球,200会员×50元=月入1w

十、合规再提醒:只挖公开矿,不碰隐私矿

不登录、不破解、不存储聊天记录

不公开卖家手机号、地址、真实昵称

对外展示脱敏itemId,避免黄牛精准狙击

商用前阅读《闲鱼用户协议》,必要时咨询法律顾问

十一、结语:让技术“温柔”地赚钱

今天这篇软文,没有对抗、没有炫技,只有:

公开接口→低风险

60行代码→可复制

CSV输出→能落地

把脚本丢给cron,每天一杯咖啡的时间,就能生成一份“二手行情报告”。

当别人还在手动滑屏,你已经用PHP把闲鱼变成了“躺赚”的副业提款机。

审核编辑 黄宇