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

将爬取到的淘宝商品信息存储到数据库是数据持久化的重要步骤。以下是将商品信息存储到数据库的详细步骤和代码示例,包括使用 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 数据库中。希望这个示例对你有所帮助!

相关推荐
微学AI21 分钟前
时序大模型 TimechoAI 赋能工业时序数据底层技术优势与实操
数据库·大模型·时序大模型
北顾笙98031 分钟前
MYSQL-day03
数据库·sql·mysql
MXsoft61832 分钟前
**混合云统一监控实践:私有云+公有云的一体化运维方案**
运维·网络·数据库
其实防守也摸鱼1 小时前
无线网络安全--10 规避WLAN验证之挫败MAC地址限制
网络·智能路由器·php·教程·虚拟机·wlan·无线网络安全
瀚高PG实验室1 小时前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
ULIi096kr1 小时前
MySQL大表优化终极方案:单表数据量上限、卡顿解决、分表分库实战教程
数据库·mysql
霖霖总总1 小时前
[MongoDB小技巧07]MongoDB 深度解析:find中投影与排序的底层机制与性能调优实战
数据库·mongodb
TechWayfarer1 小时前
云服务器地域怎么选:用离线IP数据库识别用户来源并优化部署
服务器·数据库·python·tcp/ip·数据分析
deviant-ART1 小时前
MySQL里的三个concat函数
数据库·mysql
anew___1 小时前
2026年Python爬虫技术完全指南:从入门到实战
开发语言·爬虫·python