下面详细讲解“通过selenium抓取某东的TT购买记录并分析趋势过程解析”的完整攻略。
准备工作
在开始之前,需要做一些准备工作:
-
安装 Python 环境和 Selenium 库;
-
安装 Chrome 浏览器和对应的 Chrome Driver 驱动;
-
登录某东账号,并打开 TT 购买记录页面,获取该页面的网址。
完成上述准备工作之后,便可以开始抓取和分析 TT 购买记录数据了。
抓取数据
- 首先,打开 Chrome 浏览器,并加载某东 TT 购买记录页面。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://order.jd.com/center/list.action')
-
登录某东账号。可以手动登录或通过程序自动登录,这里以手动登录为例。
-
找到 TT 购买记录所在区域的 HTML 元素,通过 Selenium 库定位该元素,并将它的内容保存到本地的文件中。这里我们使用 BeautifulSoup 库对抓取到的数据进行解析和清洗。
from bs4 import BeautifulSoup
html_source = driver.page_source
soup = BeautifulSoup(html_source, 'html.parser')
tt_records = soup.find('table', {'class': 'order-tb-list'}).find_all('tr')
- 迭代 TT 购买记录,将数据保存到本地的 CSV 文件中。
import csv
headers = ['商品名称', '商品链接', '商品价格', '购买时间']
rows = []
for rec in tt_records:
cols = rec.find_all('td')
if len(cols) > 0:
name = cols[1].find('a').text.strip()
link = cols[1].find('a')['href']
price = cols[4].find('span').text.strip()
time = cols[6].text.strip()
rows.append([name, link, price, time])
with open('tt_records.csv', mode='w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(headers)
for row in rows:
writer.writerow(row)
- 关闭 Chrome 浏览器。
driver.quit()
分析数据
- 使用 pandas 库读取本地 CSV 文件,并对数据进行初步的描述性统计。
import pandas as pd
data = pd.read_csv('tt_records.csv')
print(data.head()) # 展示前 5 条数据
print(data.info()) # 展示数据的基本信息
print(data.describe()) # 展示数据的描述性统计信息
- 分析商品名称中的关键词,并通过词云图表达商品名称的分布情况。这里我们使用 jieba 库和 wordcloud 库实现。
import jieba
from wordcloud import WordCloud
# 使用 jieba 分词
data['商品名称'] = data['商品名称'].apply(lambda x: ' '.join(jieba.cut(str(x))))
# 生成词云
words = ' '.join(data['商品名称'].tolist())
wordcloud = WordCloud(background_color='white', font_path='MSYH.TTC').generate(words)
wordcloud.to_file('wordcloud.png') # 将词云保存到本地
- 对购买时间进行时间序列分析,并通过图表展示趋势。这里我们使用 pandas 库中的 resample() 函数和 matplotlib 库实现。
import matplotlib.pyplot as plt
# 将购买时间转换为时间戳
data['购买时间'] = pd.to_datetime(data['购买时间'])
data = data.set_index('购买时间')
# 按月份统计购买数量并绘制折线图
tt_count = data['商品名称'].resample('M').count()
tt_count.plot(kind='line')
plt.title('TT 购买数量变化趋势')
plt.xlabel('时间')
plt.ylabel('购买数量')
plt.savefig('tt_trend.png') # 将图表保存到本地
这样即可完成通过 Selenium 抓取某东的 TT 购买记录并分析趋势的过程。下面给出两个示例:
示例一:抓取京东的TT购买记录
from selenium import webdriver
from bs4 import BeautifulSoup
import csv
driver = webdriver.Chrome()
driver.get('https://order.jd.com/center/list.action')
# 请手动登录京东账号
html_source = driver.page_source
soup = BeautifulSoup(html_source, 'html.parser')
tt_records = soup.find('table', {'class': 'order-tb-list'}).find_all('tr')
headers = ['商品名称', '商品链接', '商品价格', '购买时间']
rows = []
for rec in tt_records:
cols = rec.find_all('td')
if len(cols) > 0:
name = cols[1].find('a').text.strip()
link = cols[1].find('a')['href']
price = cols[4].find('span').text.strip()
time = cols[6].text.strip()
rows.append([name, link, price, time])
with open('tt_records.csv', mode='w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(headers)
for row in rows:
writer.writerow(row)
driver.quit()
示例二:分析购买数量变化趋势
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('tt_records.csv')
data['购买时间'] = pd.to_datetime(data['购买时间'])
data = data.set_index('购买时间')
tt_count = data['商品名称'].resample('M').count()
tt_count.plot(kind='line')
plt.title('TT 购买数量变化趋势')
plt.xlabel('时间')
plt.ylabel('购买数量')
plt.savefig('tt_trend.png')
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过selenium抓取某东的TT购买记录并分析趋势过程解析 - Python技术站