淘宝商品信息如何存储到数据库?

将爬取到的淘宝商品信息存储到数据库是数据持久化的重要步骤。以下是将商品信息存储到数据库的详细步骤和代码示例,包括使用 MySQL 数据库的完整流程。

一、准备工作

1. 安装 MySQL

确保你的开发环境中已经安装了 MySQL 数据库,并且可以正常运行。

2. 创建数据库和表

在 MySQL 中创建一个数据库,并在其中创建一个表来存储商品信息。以下是一个示例 SQL 脚本:

sql

sql 复制代码
CREATE DATABASE taobao_products;

USE taobao_products;

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    shop VARCHAR(255) NOT NULL,
    link VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3. 安装 PHP MySQL 扩展

确保你的 PHP 环境中已经安装了 mysqliPDO 扩展,用于与 MySQL 数据库进行交互。

二、PHP 代码实现

以下是完整的 PHP 代码示例,展示如何将爬取到的淘宝商品信息存储到 MySQL 数据库中。

1. 发起请求并解析 HTML

这部分代码与前面的示例相同,用于获取和解析淘宝商品信息。

php

php 复制代码
<?php
function get_page($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3');
    $html = curl_exec($ch);
    curl_close($ch);
    return $html;
}

function parse_product_details($html) {
    $doc = new DOMDocument();
    @$doc->loadHTML($html);
    $xpath = new DOMXPath($doc);

    $products = $xpath->query("//div[@class='m-itemlist']//div[@class='items']//div[@class='item']");
    $product_list = [];

    foreach ($products as $product) {
        $title = $xpath->query(".//div[@class='row row-2 g-clearfix']/div[@class='title']/a", $product)->item(0)->nodeValue;
        $price = $xpath->query(".//div[@class='row row-1 g-clearfix']/div[@class='price g_price g_price-highlight']/strong", $product)->item(0)->nodeValue;
        $shop = $xpath->query(".//div[@class='row row-3 g-clearfix']/div[@class='shop']/a", $product)->item(0)->nodeValue;
        $link = $xpath->query(".//div[@class='row row-2 g-clearfix']/div[@class='title']/a", $product)->item(0)->getAttribute('href');

        $product_list[] = [
            'title' => $title,
            'price' => $price,
            'shop' => $shop,
            'link' => $link
        ];
    }

    return $product_list;
}
?>
2. 将商品信息存储到数据库

使用 mysqli 扩展将商品信息插入到数据库中。

php

php 复制代码
<?php
function save_products_to_db($products) {
    $servername = "localhost";
    $username = "root";
    $password = "your_password"; // 替换为你的数据库密码
    $dbname = "taobao_products";

    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    }

    $sql = "INSERT INTO products (title, price, shop, link) VALUES (?, ?, ?, ?)";
    $stmt = $conn->prepare($sql);

    foreach ($products as $product) {
        $stmt->bind_param("sds", $product['title'], $product['price'], $product['shop'], $product['link']);
        $stmt->execute();
    }

    echo "数据已成功存储到数据库!\n";
    $stmt->close();
    $conn->close();
}
?>
3. 搜索商品并存储到数据库

将上述函数组合起来,实现搜索商品并将结果存储到数据库的功能。

php

php 复制代码
<?php
function search_products($keyword) {
    $url = "https://s.taobao.com/search?q=" . urlencode($keyword);
    $html = get_page($url);
    if ($html) {
        $products = parse_product_details($html);
        save_products_to_db($products);
    } else {
        echo "请求失败,请检查网络或关键字。\n";
    }
}

if (__FILE__ == __FILE__) {
    $keyword = readline("请输入搜索关键字:");
    search_products($keyword);
}
?>

三、完整代码示例

将上述代码片段组合起来,形成一个完整的 PHP 脚本:

php

php 复制代码
<?php
function get_page($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3');
    $html = curl_exec($ch);
    curl_close($ch);
    return $html;
}

function parse_product_details($html) {
    $doc = new DOMDocument();
    @$doc->loadHTML($html);
    $xpath = new DOMXPath($doc);

    $products = $xpath->query("//div[@class='m-itemlist']//div[@class='items']//div[@class='item']");
    $product_list = [];

    foreach ($products as $product) {
        $title = $xpath->query(".//div[@class='row row-2 g-clearfix']/div[@class='title']/a", $product)->item(0)->nodeValue;
        $price = $xpath->query(".//div[@class='row row-1 g-clearfix']/div[@class='price g_price g_price-highlight']/strong", $product)->item(0)->nodeValue;
        $shop = $xpath->query(".//div[@class='row row-3 g-clearfix']/div[@class='shop']/a", $product)->item(0)->nodeValue;
        $link = $xpath->query(".//div[@class='row row-2 g-clearfix']/div[@class='title']/a", $product)->item(0)->getAttribute('href');

        $product_list[] = [
            'title' => $title,
            'price' => $price,
            'shop' => $shop,
            'link' => $link
        ];
    }

    return $product_list;
}

function save_products_to_db($products) {
    $servername = "localhost";
    $username = "root";
    $password = "your_password"; // 替换为你的数据库密码
    $dbname = "taobao_products";

    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    }

    $sql = "INSERT INTO products (title, price, shop, link) VALUES (?, ?, ?, ?)";
    $stmt = $conn->prepare($sql);

    foreach ($products as $product) {
        $stmt->bind_param("sds", $product['title'], $product['price'], $product['shop'], $product['link']);
        $stmt->execute();
    }

    echo "数据已成功存储到数据库!\n";
    $stmt->close();
    $conn->close();
}

function search_products($keyword) {
    $url = "https://s.taobao.com/search?q=" . urlencode($keyword);
    $html = get_page($url);
    if ($html) {
        $products = parse_product_details($html);
        save_products_to_db($products);
    } else {
        echo "请求失败,请检查网络或关键字。\n";
    }
}

if (__FILE__ == __FILE__) {
    $keyword = readline("请输入搜索关键字:");
    search_products($keyword);
}
?>

四、注意事项

  1. 数据清洗

    • 在存储到数据库之前,建议对数据进行清洗,例如去除多余的空格、HTML 标签等。

    • 可以使用 PHP 的 trim()htmlspecialchars() 函数来处理数据。

  2. 数据库安全性

    • 使用参数化查询(如 prepare()bind_param())可以有效防止 SQL 注入攻击。

    • 确保数据库密码等敏感信息不要直接写在代码中,可以使用环境变量或配置文件来管理。

  3. 性能优化

    • 如果需要处理大量数据,可以考虑分批插入数据,避免一次性插入过多数据导致性能问题。

    • 使用事务可以提高数据插入的效率和可靠性。

五、示例输出

假设搜索关键字为 "iPhone 13",运行程序后可能输出如下:

php 复制代码
请输入搜索关键字:iPhone 13
数据已成功存储到数据库!

通过上述步骤和代码,你可以将爬取到的淘宝商品信息存储到 MySQL 数据库中。希望这个示例对你有所帮助!

相关推荐
jiayou6410 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
BingoGo13 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack13 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
李广坤1 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
JaguarJack1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1772 天前
《从零搭建NestJS项目》
数据库·typescript
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php