利用 Python 爬虫获取淘宝商品 SKU 详细信息

在电商领域,SKU(Stock Keeping Unit)是商品库存进出计量的基本单元。对于淘宝商品来说,SKU 信息通常包括不同的规格、价格、库存等详细信息。通过 Python 爬虫技术,我们可以高效地获取这些信息,从而为数据分析、价格监控或其他业务需求提供支持。以下将详细介绍如何使用 Python 实现获取淘宝商品 SKU 详细信息的功能。

一、准备工作

1. 安装必要的库

在开始之前,确保已经安装了以下 Python 库:

  • Selenium:用于模拟浏览器操作,获取动态加载的内容。
  • PyQuery:用于解析 HTML 内容。
  • openpyxl:用于将数据保存到 Excel 文件中。

如果尚未安装这些库,可以通过以下命令进行安装:

bash 复制代码
pip install selenium pyquery openpyxl

2. 下载 ChromeDriver

确保你已经下载了与你的 Chrome 浏览器版本匹配的 ChromeDriver,并将其路径添加到系统的 PATH 环境变量中。

二、代码实现

以下是使用 Python 爬虫获取淘宝商品 SKU 详细信息的完整代码示例。

1. 引入必要的库

Python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
import time
import openpyxl as op

2. 初始化 WebDriver

Python 复制代码
# 启动 ChromeDriver 服务
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ['enable-automation'])
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})
driver.maximize_window()
driver.get('https://www.taobao.com')
wait = WebDriverWait(driver, 20)

3. 搜索商品

Python 复制代码
def search_goods(keyword):
    try:
        print(f"正在搜索: {keyword}")
        input_element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#q")))
        submit_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
        input_element.send_keys(keyword)
        submit_button.click()
        time.sleep(2)
        print("搜索完成!")
    except Exception as exc:
        print(f"search_goods 函数错误!Error:{exc}")

4. 获取商品列表信息

Python 复制代码
def get_goods(page):
    try:
        print(f"正在获取第 {page} 页的商品信息")
        html = driver.page_source
        doc = pq(html)
        items = list(doc('div.m-itemlist .items .item').items())

        for item in items:
            title = item.find('.title').text()
            price = item.find('.price').text()
            deal = item.find('.deal-cnt').text()
            location = item.find('.location').text()
            shop = item.find('.shop').text()
            product = {
                'title': title,
                'price': price,
                'deal': deal,
                'location': location,
                'shop': shop
            }
            print(product)
    except Exception as exc:
        print(f"get_goods 函数错误!Error:{exc}")

5. 翻页操作

Python 复制代码
def page_turning(page_number):
    try:
        print(f"正在翻页: 第 {page_number} 页")
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.m-page .next')))
        submit.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '.m-page .curr'), str(page_number)))
        print(f"已翻至: 第 {page_number} 页")
    except Exception as exc:
        print(f"page_turning 函数错误!Error:{exc}")

6. 主程序

Python 复制代码
if __name__ == '__main__':
    keyword = input('输入搜索的商品关键词 Keyword:')
    page_start = int(input('输入爬取的起始页 PageStart:'))
    page_end = int(input('输入爬取的终止页 PageEnd:'))

    search_goods(keyword)
    get_goods(page_start)
    for i in range(page_start + 1, page_end + 1):
        page_turning(i)
        get_goods(i)

三、代码解释

  1. 搜索商品

    • 使用 Selenium 模拟浏览器操作,输入关键字并点击搜索按钮。
    • 等待页面加载完成,并处理可能出现的滑块验证。
  2. 获取商品信息

    • 使用 PyQuery 解析页面 HTML,提取商品的标题、价格、销量、店铺名称等信息。
    • 将提取到的信息打印到控制台。
  3. 翻页操作

    • 模拟点击"下一页"按钮,实现翻页操作。
    • 等待页面加载完成,并验证是否成功翻页。
  4. 主程序

    • 输入搜索关键字和爬取的页码范围。
    • 调用搜索函数和翻页函数,依次获取每一页的商品信息。

四、注意事项

  1. 反爬机制

    • 淘宝可能会对爬虫进行限制,例如限制 IP 访问频率、检测异常请求等。如果遇到这种情况,可以尝试以下方法:

      • 使用代理服务器(如代理 IP 池)。
      • 增加请求间隔时间(使用 time.sleep())。
      • 模拟更多浏览器行为(如设置更多请求头)。
  2. 动态加载内容

    • 淘宝的部分内容可能是通过 JavaScript 动态加载的。如果发现获取到的 HTML 内容中缺少某些数据,可以考虑使用 Selenium 来模拟浏览器操作。
  3. 数据存储

    • 如果需要将爬取到的数据存储起来,可以将其保存到文件(如 CSV、JSON)或数据库中。

五、总结

通过上述步骤和代码,你可以使用 Python 实现获取淘宝商品 SKU 详细信息的功能。希望这个示例对你有所帮助!

相关推荐
老胖闲聊2 小时前
Python PyAutoGUI库【GUI 自动化库】深度解析与实战指南
python
GeekABC4 小时前
FastAPI系列06:FastAPI响应(Response)
开发语言·python·fastapi·web
fen_fen4 小时前
Python3:Jupyter Notebook 安装和配置
ide·python·jupyter
float_六七4 小时前
Python语言基础知识详解:分支结构控制语句
python
声声codeGrandMaster4 小时前
django之优化分页功能(利用参数共存及封装来实现)
数据库·后端·python·django
Johny_Zhao5 小时前
OpenStack 全套搭建部署指南(基于 Kolla-Ansible)
linux·python·信息安全·云计算·openstack·shell·yum源·系统运维
27669582925 小时前
海关 瑞数 后缀分析 rs
java·python·rs·瑞数·海关·瑞数后缀·后缀生成
学c真好玩5 小时前
Django创建的应用目录详细解释以及如何操作数据库自动创建表
后端·python·django
沐暖沐5 小时前
Django(快速上手版)
python·django
槑槑紫6 小时前
pytorch(gpu版本安装)
人工智能·pytorch·python