淘宝商品搜索爬虫实战:Python实现详解教程
在大数据时代,获取电商平台的商品信息对于市场调研、数据分析等有着重要意义。淘宝作为国内知名的电商平台,其商品数据丰富多样。本文将详细介绍如何使用 Python 编写爬虫,按关键字搜索淘宝商品并获取相关信息。
一、准备工作
在开始编写爬虫之前,需要安装一些必要的 Python 第三方库,包括 selenium、pyquery 和 openpyxl。这些库可以通过 pip 命令安装:
bash
pip install pyquery
pip install selenium
pip install openpyxl
此外,还需要下载与浏览器版本匹配的 ChromeDriver。
二、代码实现
1. 初始化
首先,需要导入所需的库,并设置 ChromeDriver 的选项:
Python
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
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
# 设置 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)
2. 搜索商品
通过模拟浏览器操作,输入关键字并点击搜索按钮:
Python
def search_goods(keyword):
try:
print("正在搜索: {}".format(keyword))
input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#q")))
submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
input.send_keys(keyword)
submit.click()
time.sleep(2)
print("搜索完成!")
except Exception as exc:
print("search_goods函数错误!Error:{}".format(exc))
3. 获取商品信息
在搜索结果页面,通过解析 HTML 获取商品的标题、价格、销量等信息:
Python
def get_goods(page):
try:
html = driver.page_source
doc = pq(html)
items = list(doc('div.content--CUnfXXxv > div > div').items())
for item in items:
title = item.find('.title--qJ7Xg_90 span').text()
price = item.find('.innerPriceWrapper--aAJhHXD4').text()
deal = item.find('.realSales--XZJiepmt').text()
location = item.find('.procity--wlcT2xH9 span').text()
shop = item.find('.shopNameText--DmtlsDKm').text()
postText = item.find('.subIconWrapper--Vl8zAdQn').text()
t_url = item.find('.doubleCardWrapperAdapt--mEcC7olq').attr('href')
shop_url = item.find('.TextAndPic--grkZAtsC a').attr('href')
img_url = item.find('.mainPicAdaptWrapper--V_ayd2hD img').attr('src')
product = {
'Page': page,
'title': title,
'price': price,
'deal': deal,
'location': location,
'shop': shop,
'isPostFree': postText,
'url': t_url,
'shop_url': shop_url,
'img_url': img_url
}
print(product)
except Exception as exc:
print("get_goods函数错误!Error:{}".format(exc))
4. 翻页操作
为了获取多页数据,需要实现翻页功能:
Python
def page_turning(page_number):
try:
print("正在翻页: 第{}页".format(page_number))
time.sleep(2)
submit = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="search-content-leftWrap"]/div[2]/div[4]/div/div/button[2]')))
submit.click()
wait.until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="search-content-leftWrap"]/div[2]/div[4]/div/div/span[1]/em'), str(page_number)))
print("已翻至: 第{}页".format(page_number))
except Exception as exc:
print("page_turning函数错误!Error:{}".format(exc))
5. 主函数
最后,将上述功能整合到主函数中:
Python
def Crawer_main(keyword, pageStart, pageEnd):
try:
search_goods(keyword)
if pageStart != 1:
turn_pageStart(pageStart)
get_goods(pageStart)
for i in range(pageStart + 1, pageEnd + 1):
page_turning(i)
get_goods(i)
except Exception as exc:
print("Crawer_main函数错误!Error:{}".format(exc))
三、运行与结果
运行程序后,根据输入的关键字和页码范围,爬虫将自动搜索并获取淘宝商品信息。这些信息可以进一步存储到 Excel 文件中,方便后续分析。
通过上述代码,您可以轻松实现按关键字搜索淘宝商品的功能。需要注意的是,淘宝的反爬机制较为复杂,可能需要根据实际情况调整代码。同时,应遵守淘宝的使用条款,合理使用爬取的数据。
希望这篇文章对您有所帮助!如果您在实现过程中遇到任何问题,欢迎随时交流讨论。
作者:API小爬虫