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

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

相关推荐
机灵小和尚12 分钟前
腾讯云 Teo H5直传CDN空间
后端·云计算·php·腾讯云·html5
繢鴻40 分钟前
数据库优化实战分享
数据库
Cachel wood1 小时前
后端开发:计算机网络、数据库常识
android·大数据·数据库·数据仓库·sql·计算机网络·mysql
暗离子跃迁2 小时前
达梦数据库单机部署dmhs同步复制(dm8->kafka)
linux·运维·数据库·分布式·学习·kafka·达梦数据库
LUCIAZZZ2 小时前
项目拓展-Apache对象池,对象池思想结合ThreadLocal复用日志对象
java·jvm·数据库·spring·apache·springboot
水木石画室2 小时前
Druid 连接池详解
数据库·mysql
yzpyzp2 小时前
gradle的 build时kaptDebugKotlin 处理数据库模块
android·数据库
软件2052 小时前
【redis——缓存雪崩(Cache Avalanche)】
数据库·redis·缓存
Joomla中文网3 小时前
joomla5去掉后台PHP版本警告信息
开发语言·php
訾博ZiBo3 小时前
使用 Navicat 成功导入 2.73GB 超大 SQL 文件的实战经验(Win10,64GB内存)
数据库·mysql