给大家做一个基于Python爬取商品价格曲线,祝大家剁手快乐

Posted 程序员朱鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给大家做一个基于Python爬取商品价格曲线,祝大家剁手快乐相关的知识,希望对你有一定的参考价值。

稀稀拉拉的过往

先介绍下自己吧 !河北廊坊人,湖北工业大学(大专土木专业),20年毕业后回到老家廊坊干本专业工作,说说自己为什么毕业就想转行了吧!行业师兄也认识几个,相比所认识做it的朋友,同样是4 5年工作 差距真的很大,当初选土木专业,刚好那会土木发展还不错,大学老师各种夸好,其实后来接触下来,发现我对土木并不热爱。但是好就业是真的,一毕业就工作了,工资2500,私企施工单位,我的体力劳动大于脑力劳动,说白了就是一带眼镜的农民工,还好我带眼镜,要不然就是农民工了,有喜欢的女孩子那段时间都没自信心追求,不修边幅,烟酒必备,透支身体,涨薪幅度很低,我基本上已经看到了工作的5年师兄5000工资,和一眼看到未来的自己才是最可怕的,前景遥遥无期,而且20年年底那会,经常半夜施工,加班常有的事,主要是甲方就是你大爷,我本人还算了解自己,不大适应,权术拍马屁的一个人,就做好自己工作就行,恰恰这行就需要这样,比我早进行业的老哥们,我们经常夜宵,感觉他们都是喝酒来麻痹自己,转行年龄资本也晚了,现在想起来虽然程序员也加班,相比补贴各方面也有所安慰了。以上感触还有很多,当然也不排除混的很好师兄,很热爱土木的师兄。

经历不多,太多感叹 ,太多感触,我不怪行业,只怪自己,当时唯一的想法也是就想早点跳出来,以后想跳都跳不出来了,我当时跟一起工作的李哥话语很多,他们也都支持我转行,不要步自己后尘,哪怕转行失败了。我也心甘情愿,也谢谢他们对我的支持。

转行开始到找到工作,差不多整整一年了,时间可以说快,也可以说慢,最终选择了学习Python,不为别的,就因为它容易上手工资也可观!

附带一张学习图,当时凌晨12点还在敲代码的自己,当时自己打气发的朋友圈没有删。找到唯一的一张图了。

给大家的618礼物

一年一度的618购物节就要到了,各种优惠活动从5月份开始充斥淘宝、京东、抖音等各大平台。购物节产品的“明降暗升”已经是默认的潜规则了。打破这种规则很简单,可以用 Python 写一个定时监控商品价格的小工具。

思路第一步抓取商品的价格存入 Python 自带的 SQLite 数据库每天定时抓取商品价格使用 pyecharts 模块绘制价格折线图,让低价一目了然

抓取价格

从商品详情的页面中打开 F12 控制面板,找到包含 p.3 的链接,在旁边的 preview 面板中可以看到当前商品价格


defget_jd_price(skuId):

sku_detail_url = 'http://item.jd.com/.html'
  sku_price_url = 'https://p.3.cn/prices/get?type=1&skuid=J_'
 
  r = requests.get(sku_detail_url.format(skuId)).content
 
  soup = BeautifulSoup(r, 'html.parser', from_encoding='utf-8')
  sku_name_div = soup.find('div', class_="sku-name")
 
  if not sku_name_div:
    print('您输入的商品ID有误!')
    return
  else:
    sku_name = sku_name_div.text.strip()
 
  r = requests.get(sku_price_url.format(skuId))
  price = json.loads(r.text)[0]['p']
 
  data = 
    'sku_id': skuId,
    'sku_name': sku_name,
    'price': price
  
  return data

把抓取的价格存入 sqlite 数据库,使用 PyCharm 的 Database 功能创建一个 sqlite 数据库



最终将数据插入到数据库

# 新增
def insert(data):
  conn = sqlite3.connect('price.db')
  c = conn.cursor()
  sql = 'INSERT INTO price (sku_id,sku_name,price) VALUES ("", "", "")'.format(data.get("sku_id"), data.get("sku_name"), data.get('price') )
  c.execute(sql)
  conn.commit()
  conn.close()
 
# 查询
def select(sku_id):
  conn = sqlite3.connect('price.db')
  c = conn.cursor()
  sql = 'select sku_id, sku_name, price, time from price where sku_id = "" order by time asc'.format(sku_id)
  cursor = c.execute(sql)
 
  datas = []
  for row in cursor:
    data = 
      'sku_id': row[0],
      'sku_name': row[1],
      'price': row[2],
      'time': row[3]
    
    datas.append(data)
  conn.close()
 
  return datas

示例结果

使用轻量级的 schedule 模块每天早上 10 点抓取京东价格这一步骤

安装 schedule 模块

pip install schedule
def run_price_job(skuId):
 
  # 使用不占主线程的方式启动 计划任务
  def run_continuously(interval=1):
    cease_continuous_run = threading.Event()
 
    class ScheduleThread(threading.Thread):
      @classmethod
      def run(cls):
        while not cease_continuous_run.is_set():
          schedule.run_pending()
          time.sleep(interval)
 
    continuous_thread = ScheduleThread()
    continuous_thread.start()
    return cease_continuous_run
   
  # 每天10点运行,get_jd_price:任务方法,skuId:任务方法的参数
  schedule.every().day.at("10:00").do(get_jd_price, skuId=skuId)
  run_continuously()

查看历史价格

使用 pytharts 模块绘制折线图,直观的查看每一天的价格差异

datas = select(skuId)
 
def line(datas):
  x_data = []
  y_data = []
  for data in datas:
    x_data.append(data.get('time'))
    y_data.append(data.get('price'))
 
  (
    Line()
    .add_xaxis(x_data)
    .add_yaxis(datas[0].get('sku_name'), y_data, is_connect_nones=True)
    .render("商品历史价格.html")
  )

总结

本文抓取了京东商城的价格,小伙伴们也可以修个脚本抓取淘宝的价格。使用 Python 解决生活中的小小痛点,让钱包不再干瘪。

如果你喜欢我们今天的Python教程,请三连,如果对你有帮助,可扫下方领取Python全套学习资料。

以上是关于给大家做一个基于Python爬取商品价格曲线,祝大家剁手快乐的主要内容,如果未能解决你的问题,请参考以下文章

给大家做一个基于Python爬取商品价格曲线,祝大家剁手快乐

python制作爬虫爬取京东商品评论教程

用Python爬取分析某东618畅销商品销量数据,带你看看大家都喜欢买什么!

Python爬虫实战之爬淘宝商品并做数据分析,现在赚钱没点技术还真不行!

用Python爬取分析某东618畅销商品销量数据,带你看看大家都喜欢买什么!

利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程