PHP爬虫:在互联网的花丛中轻盈跳跃,采集订单详情

88 阅读3分钟

在这个数据驱动的世界里,数据就像是一朵朵盛开的花,而我们程序员就像是一群勤劳的蜜蜂,需要采集这些花朵的蜜——也就是数据。今天,我们就来聊聊如何使用PHP编写一个爬虫,这个爬虫将像一个优雅的舞者,在互联网的花丛中轻盈地跳跃,采集着商品订单的详细信息。

微信截图_20240905153728.png

环境搭建:舞者的舞台

首先,我们需要搭建一个“舞台”,也就是我们的PHP开发环境。确保你的电脑上已经安装了PHP和Composer。接下来,我们需要收集一些“舞鞋”——也就是必要的库。

  • GuzzleHttp:用来发送HTTP请求,就像舞者的舞鞋,让它能够优雅地跳跃。
  • JsonMapper:用来解析JSON数据,就像舞者的舞裙,让它能够优雅地舞动。
  • PhpSpreadsheet:用来存储数据,就像舞者的舞台,让它能够优雅地展示成果。

你可以通过Composer来安装这些库,就像舞者收集舞鞋和舞裙一样。

composer require guzzlehttp/guzzle
composer require jasongrimes/php-spreadsheet

获取API密钥:舞者的入场券

在采集数据之前,我们需要一张“入场券”——API密钥。这通常可以在电商平台的开发者文档中找到。拿到这张“入场券”后,我们就可以进入数据的“花园”了。

编写爬虫:舞者的舞蹈

1. 发送API请求:舞者的跳跃

我们的PHP程序将使用GuzzleHttp来发送HTTP请求,就像舞者穿上舞鞋,优雅地跳跃。

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();
$apiKey = '你的API密钥';
$url = 'https://api.example.com/orders';

try {
    $response = $client->request('GET', $url, [
        'headers' => [
            'Authorization' => 'Bearer ' . $apiKey
        ]
    ]);
    $ordersData = $response->getBody()->getContents();
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

2. 解析JSON数据:舞者的旋转

接下来,我们使用JsonMapper来解析API返回的JSON数据,就像舞者穿上舞裙,优雅地旋转。

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;
use JsonMapper;

$client = new Client();
$apiKey = '你的API密钥';
$url = 'https://api.example.com/orders';

try {
    $response = $client->request('GET', $url, [
        'headers' => [
            'Authorization' => 'Bearer ' . $apiKey
        ]
    ]);
    $ordersData = $response->getBody()->getContents();
    $json = json_decode($ordersData);
    $mapper = new JsonMapper();
    $orders = $mapper->mapArray($json->orders, new \stdClass());
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

3. 存储数据:舞者的舞台

最后,我们使用PhpSpreadsheet将解析后的数据存储到Excel文件中,就像舞者优雅地在舞台上展示成果。

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;
use JsonMapper;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$client = new Client();
$apiKey = '你的API密钥';
$url = 'https://api.example.com/orders';

try {
    $response = $client->request('GET', $url, [
        'headers' => [
            'Authorization' => 'Bearer ' . $apiKey
        ]
    ]);
    $ordersData = $response->getBody()->getContents();
    $json = json_decode($ordersData);
    $mapper = new JsonMapper();
    $orders = $mapper->mapArray($json->orders, new \stdClass());

    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', 'Order ID');
    $sheet->setCellValue('B1', 'Order Date');
    $sheet->setCellValue('C1', 'Order Amount');

    $row = 2;
    foreach ($orders as $order) {
        $sheet->setCellValue('A' . $row, $order->id);
        $sheet->setCellValue('B' . $row, $order->date);
        $sheet->setCellValue('C' . $row, $order->amount);
        $row++;
    }

    $writer = new Xlsx($spreadsheet);
    $writer->save('orders.xlsx');
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

4. 主函数:舞者的完整舞蹈

现在,我们将所有的部分整合到一个主函数中,就像舞者完成一个完整的舞蹈一样。

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;
use JsonMapper;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

function main() {
    $client = new Client();
    $apiKey = '你的API密钥';
    $url = 'https://api.example.com/orders';

    try {
        $response = $client->request('GET', $url, [
            'headers' => [
                'Authorization' => 'Bearer ' . $apiKey
            ]
        ]);
        $ordersData = $response->getBody()->getContents();
        $json = json_decode($ordersData);
        $mapper = new JsonMapper();
        $orders = $mapper->mapArray($json->orders, new \stdClass());

        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Order ID');
        $sheet->setCellValue('B1', 'Order Date');
        $sheet->setCellValue('C1', 'Order Amount');

        $row = 2;
        foreach ($orders as $order) {
            $sheet->setCellValue('A' . $row, $order->id);
            $sheet->setCellValue('B' . $row, $order->date);
            $sheet->setCellValue('C' . $row, $order->amount);
            $row++;
        }

        $writer = new Xlsx($spreadsheet);
        $writer->save('orders.xlsx');
        echo "数据已经存储到orders.xlsx文件中,就像舞者优雅地在舞台上展示成果一样。\n";
    } catch (Exception $e) {
        echo 'Error: ' . $e->getMessage();
    }
}

main();

运行爬虫:舞者的华丽谢幕

将上述代码保存为main.php,然后在命令行中运行:

php main.php

这将发送API请求,获取订单数据,解析JSON数据,并将结果存储到orders.xlsx文件中。

总结

通过上述步骤,我们可以使用PHP编写一个简单的爬虫,通过API获取商品订单详情,并将数据存储到本地。这种方法不仅适用于电商平台,还可以扩展到其他需要数据获取的场景。