给大家做一个基于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爬取分析某东618畅销商品销量数据,带你看看大家都喜欢买什么!
Python爬虫实战之爬淘宝商品并做数据分析,现在赚钱没点技术还真不行!