<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Python 制作商品歷史價(jià)格查詢

          共 3132字,需瀏覽 7分鐘

           ·

          2020-10-24 07:37

          文 |?某某白米飯

          來(lái)源:Python 技術(shù)「ID: pythonall」

          一年一度的雙十一就快到了,各種砍價(jià)、蓋樓、挖現(xiàn)金的口令將在未來(lái)一個(gè)月內(nèi)充斥朋友圈、微信群中。玩過(guò)多次雙十一活動(dòng)的小編表示一頓操作猛如虎,一看結(jié)果2毛5。浪費(fèi)時(shí)間不說(shuō)而且未必得到真正的優(yōu)惠,雙十一電商的“明降暗升”已經(jīng)是默認(rèn)的潛規(guī)則了。打破這種規(guī)則很簡(jiǎn)單,可以用 Python 寫(xiě)一個(gè)定時(shí)監(jiān)控商品價(jià)格的小工具。

          思路

          1. 第一步抓取商品的價(jià)格存入 Python 自帶的 SQLite 數(shù)據(jù)庫(kù)
          2. 每天定時(shí)抓取商品價(jià)格
          3. 使用 pyecharts 模塊繪制價(jià)格折線圖,讓低價(jià)一目了然

          抓取京東價(jià)格

          從商品詳情的頁(yè)面中打開(kāi) F12 控制面板,找到包含 p.3 的鏈接,在旁邊的 preview 面板中可以看到當(dāng)前商品價(jià)格

          def?get_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

          把抓取的價(jià)格存入 sqlite 數(shù)據(jù)庫(kù),使用 PyCharm 的 Database 功能創(chuàng)建一個(gè) sqlite 數(shù)據(jù)庫(kù)

          最終將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)

          #?新增
          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

          示例結(jié)果

          計(jì)劃任務(wù)

          使用輕量級(jí)的 schedule 模塊每天早上 10 點(diǎn)抓取京東價(jià)格這一步驟

          安裝 schedule 模塊

          pip?install?schedule
          def?run_price_job(skuId):

          ????#?使用不占主線程的方式啟動(dòng)?計(jì)劃任務(wù)
          ????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點(diǎn)運(yùn)行,get_jd_price:任務(wù)方法,skuId:任務(wù)方法的參數(shù)
          ????schedule.every().day.at("10:00").do(get_jd_price,?skuId=skuId)
          ????run_continuously()

          查看歷史價(jià)格

          使用 pytharts 模塊繪制折線圖,直觀的查看每一天的價(jià)格差異


          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("商品歷史價(jià)格.html")
          ????)

          總結(jié)

          本文抓取了京東商城的價(jià)格,小伙伴們也可以修個(gè)腳本抓取淘寶的價(jià)格。使用 Python 解決生活中的小小痛點(diǎn),讓錢包不再干癟。

          PS公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下如果感覺(jué)文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!

          代碼獲取方式

          識(shí)別文末二維碼,回復(fù):201022

          瀏覽 76
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲国产成人精品女人 | 欧美成人性爱可下载视频 | 性色A√ | 亚洲无码蜜桃视频 | 日韩另类在线观看 |