目的:爬取某商品的历史价格并绘制折线图
淘宝是没有把历史价格放在前端网页上的,而京东可以找到历史价格,但没有对应的日期。所以我是从专门的历史价格比较网爬取数据,这里推荐的是过客网。在 F 12 F_{12} F12后的 N e t w o r k Network Network中搜索 h i s t r o y histroy histroy,即可找到历史价格存放的 h t m l html html网页。
1.头部伪装
import requests
# 网页源码爬取
# 头部伪装
# 内容根据自己的填
headers = {
referer: 内容,
user-agent: 内容,
cookie: 内容
}
url = http://www.tool168.cn/dm/history.php?code=0f72c0c84e6f722de6fb57f9feb3691e26545bc2991ffc290ed35271bb85549929f4303312be17d55c4b131cbefd4011687a4a6672b8ef28&t=&ud=ZGVIMVHOTJHSSKJOVYY_1638970965&reqid=874661af889c27f78a8e83ada294a87adata = requests.get(url, headers=headers).text
html = requests.get(url, headers=headers).text
html
2.正则表达式对网页源码进行过滤
注意点:多次爬取后,网页源代码出现些变化,所以正则表达式需要做出改变
import re
# 过滤日期的正则表达式
data_date = re.findall(r([1-9][0-9][1-9]*,[0-9]*,[0-9]*), html)
date = []
# 更改日期格式
for i in data_date:
date.append(i.replace(,, /))
# 过滤价格的正则表达式
data_price = re.findall(r[1-9]*.[0-9]*], html)
price = []
# 对价格格式进行清洗
for i in data_price:
price.append(eval(i.replace(], )))
print(date)
print(price)
3.保存数据(excel)
# 将数据全部存入excel表格中
import xlsxwriter as xw
file_name = "价格趋势.xlsx"
# 创建excel工作表
excel = xw.Workbook(file_name)
# 创建sheet1子表
sheet = excel.add_worksheet("sheet_tmall")
# 设置表头
title = [日期, 价格]
# 从A1开始写入表头
sheet.write_row("A1", title)
# 从第二行开始写入数据
j = 2
for i in range(len(date)):
insert_data = [date[i], price[i]]
print(insert_data)
row = "A" + str(j)
sheet.write_row(row, insert_data)
j += 1
print("数据全部存入excel")
4. 绘制折线图可视化
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams[font.sans-serif]=[SimHei] #用来正常显示中文标签
data = pd.read_excel(r"价格趋势.xlsx")
date = data["日期"].values
price = data["价格"].values
fig = plt.figure(figsize=(26,5))
ax = fig.add_subplot(111)
plt.plot(date, price, --)
#
ax.set_xticklabels(date, rotation=30)
# 设置标题
ax.set_title("价格趋势图")
# 设置x轴标签
ax.set_xlabel("日期")
# 设置y轴标签
ax.set_ylabel("价格")
# 保存图片
plt.savefig(价格趋势图.png)
plt.show()