利用 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 详细信息的功能。希望这个示例对你有所帮助!

相关推荐
吴佳浩21 小时前
Langchain 浅出
python·langchain·llm
smj2302_7968265221 小时前
解决leetcode第3753题范围内总波动值II
python·算法·leetcode
mortimer1 天前
破局视频翻译【最后一公里】––从语音克隆到口型对齐的完整工程思路
python·github·aigc
门框研究员1 天前
解锁Python的强大能力:深入理解描述符
python
子不语1801 天前
Python——函数
开发语言·python
daidaidaiyu1 天前
一文入门 LangChain 开发
python·ai
JJ1M81 天前
用 Python 快速搭建一个支持 HTTPS、CORS 和断点续传的文件服务器
服务器·python·https
汤姆yu1 天前
基于python大数据的小说数据可视化及预测系统
大数据·python·信息可视化
x***J3481 天前
Python多线程爬虫
开发语言·爬虫·python
m***D2861 天前
Python网络爬虫实战案例
开发语言·爬虫·python