Python爬取天猫畅销榜接口的详细教程
在电商数据分析中,获取天猫畅销榜数据对于市场调研、竞品分析以及消费者行为研究具有重要意义。本文将详细介绍如何使用Python技术爬取天猫畅销榜数据,包括接口设计、爬虫实现以及数据处理等技术细节。
一、准备工作
-
安装必要的Python库
-
requests
:用于发送HTTP请求。 -
BeautifulSoup
:用于解析HTML页面。 -
pandas
:用于数据处理和存储。 -
selenium
:用于模拟浏览器操作,处理动态加载的数据。
安装命令:
bash复制
pip install requests beautifulsoup4 pandas selenium
-
-
获取天猫畅销榜页面URL
-
打开天猫首页,搜索目标商品类别(如“口红”),点击“销量”排序,并筛选“天猫”商品。
-
记录下当前页面的URL,这是爬取数据的基础。
-
二、天猫畅销榜接口设计
天猫畅销榜数据通常通过动态加载的方式呈现,因此直接请求页面的HTML可能无法获取完整数据。此时,可以使用requests
库结合BeautifulSoup
解析页面,或者使用Selenium
模拟浏览器操作。
三、使用Selenium
爬取天猫畅销榜数据
Selenium
可以模拟用户在浏览器中的操作,适用于动态加载的页面。以下是使用Selenium
爬取天猫畅销榜数据的完整代码示例:
Python
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pandas as pd# 初始化Selenium WebDriver
driver = webdriver.Chrome()def get_tmall_best_sellers(keyword, page_num):# 打开天猫首页并搜索关键词url = f"https://www.tmall.com/?q={keyword}"driver.get(url)time.sleep(5)# 点击“销量”排序和“天猫”筛选driver.find_element(By.LINK_TEXT, "天猫").click()time.sleep(5)driver.find_element(By.LINK_TEXT, "销量").click()time.sleep(5)data_lst = []for j in range(1, page_num + 1):try:for i in range(1, 45): # 每页最多44个商品try:dic = {}dic['img'] = driver.find_element(By.XPATH, f'//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[{i}]/div[1]/div/div[1]/a/img').get_attribute('src')dic['标题'] = driver.find_element(By.XPATH, f'//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[{i}]/div[2]/div[2]').textdic['店铺'] = driver.find_element(By.XPATH, f'//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[{i}]/div[2]/div[3]/div[1]/a/span[2]').textdic['店家地址'] = driver.find_element(By.XPATH, f'//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[{i}]/div[2]/div[3]/div[2]').textdic['产品售价'] = driver.find_element(By.XPATH, f'//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[{i}]/div[2]/div[1]/div[1]/strong').textdic['付款情况'] = driver.find_element(By.XPATH, f'//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[{i}]/div[2]/div[1]/div[2]').textdata_lst.append(dic)except:print("数据采集失败")# 翻页操作num = driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/input')num.clear()num.send_keys(j + 1)driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/span[3]').click()time.sleep(5)print(f"已爬取{j}页,程序休息.....5s")except:continueprint(f"一共获取{len(data_lst)}条数据")return data_lstif __name__ == '__main__':keyword = "口红" # 搜索关键词page_num = 5 # 爬取页数data_lst = get_tmall_best_sellers(keyword, page_num)df = pd.DataFrame(data_lst)df.to_excel('tmall_best_sellers.xlsx', index=False) # 保存到Exceldriver.quit()
四、数据处理与分析
-
数据清洗
-
使用
pandas
对爬取的数据进行清洗,去除重复项、空值等。 -
示例代码:
Pythonimport pandas as pddf = pd.read_excel('tmall_best_sellers.xlsx') df.drop_duplicates(inplace=True) # 去除重复项 df.dropna(inplace=True) # 去除空值 df.to_excel('cleaned_data.xlsx', index=False)
-
-
数据分析
-
销量分析:统计不同店铺的销量。
Pythondf_c_s_sum = df.groupby('店铺')['付款情况'].sum().reset_index() df_c_s_sum.columns = ['店铺', '总销量'] df_c_s_sum = df_c_s_sum.sort_values(by='总销量', ascending=False) df_c_s_sum.to_excel('shop_sales_analysis.xlsx', index=False)
-
价格分布:分析商品价格分布。
Pythonimport matplotlib.pyplot as pltplt.hist(df['产品售价'].astype(float), bins=40, color='steelblue') plt.xlabel('价格') plt.ylabel('商品数量') plt.title('商品价格分布') plt.savefig('price_distribution.png')
-
五、注意事项
-
遵守法律法规
-
确保爬取数据的行为符合相关法律法规,尊重数据所有者的权益。
-
-
避免频繁请求
-
在爬取数据时,合理控制请求频率,避免对目标服务器造成过大压力。
-
-
数据安全
-
确保数据传输和存储的安全,防止数据泄露。
-
六、结语
通过Python技术实现对天猫畅销榜数据的爬取,能够为电商运营提供有力的数据支持。本文介绍了使用Selenium
爬取数据的方法,并提供了完整的代码示例和数据处理分析的步骤。希望本文能为需要爬取天猫畅销榜数据的开发者提供参考和帮助。
如遇任何疑问或有进一步的需求,请随时与我联系。