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

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

相关推荐
xdpcxq102934 分钟前
EF Core框架数据库连接管理
java·jvm·数据库
期待のcode1 小时前
MyBatis框架—延迟加载与多级缓存
java·数据库·后端·缓存·mybatis
老华带你飞1 小时前
小区服务|基于Java+vue的小区服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·小区服务管理系统
FreeBuf_1 小时前
Zloader木马再次升级:通过DNS隧道和WebSocket C2实现更隐蔽的攻击
websocket·网络协议·php
柯南二号2 小时前
【Java后端】MyBatis 和 MyBatis-Plus (MP) 的区别
java·数据库·tomcat
C++chaofan2 小时前
游标查询在对话历史场景下的独特优势
java·前端·javascript·数据库·spring boot
用户3521802454752 小时前
🌭 代码审计-xiuno BBS
安全·php
小蒜学长2 小时前
springboot房地产销售管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
0wioiw03 小时前
PostgreSQL(②基础命令)
数据库·postgresql
BingoGo3 小时前
PHP 8.2 vs PHP 8.3 对比:新功能、性能提升和迁移技巧
后端·php