爬虫:爬取某个商品的历史价格并绘制折线图

目的:爬取某商品的历史价格并绘制折线图

淘宝是没有把历史价格放在前端网页上的,而京东可以找到历史价格,但没有对应的日期。所以我是从专门的历史价格比较网爬取数据,这里推荐的是过客网。在 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()
经验分享 程序员 微信小程序 职场和发展