Python爬虫-京东商品到货自动邮件通知
生活随笔
收集整理的這篇文章主要介紹了
Python爬虫-京东商品到货自动邮件通知
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 京東爬蟲
- 網頁分析
- 代碼實現
- 效果演示
- 小結
前言
前陣子疫情嚴重期間,口罩遭到瘋搶,各大電商平臺口罩供不應求。本文簡述如何通過 Python 爬蟲不斷監控京東商品是否有貨,并在到貨時自動發送商品到貨通知郵件到指定的郵箱。
京東爬蟲
網頁分析
先來看看京東無貨的某牌一次性使用醫用口罩(為了找到無貨的,無奈選了寶島):
為了獲得查詢當前商品是否有貨的API,重新選擇配送地區并抓包觀察:
成功找到目標API:
繼續獲取以下商品的查詢請求進行本次爬蟲實踐:
以上三種商品的URL分別對應:
代碼實現
先來看完整代碼:
'''京東商品到貨郵件通知 ''' import requests import time# 有貨通知 收件郵箱 mail = '130XXXXXXXX@163.com' # 商品的url url = ['https://c0.3.cn/stock?skuId=100006979473&area=32_2768_53502_54370&venderId=1000096602&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=1597738524154116867159&ch=1&callback=jQuery9707334','https://c0.3.cn/stock?skuId=100012198150&area=32_2768_53502_54370&venderId=1000304541&cat=14065,14099,14103&buyNum=1&choseSuitSkuIds=&extraParam={%22originid%22:%221%22}&ch=1&fqsp=0&pduid=1597738524154116867159&pdpin=&detailedAdd=null&callback=jQuery3905354','https://c0.3.cn/stock?skuId=12639103&cat=1713,3287,3801&venderId=0&area=32_2768_53502_54370&buyNum=1&choseSuitSkuIds=&extraParam={%22originid%22:%221%22}&ch=1&fqsp=0&pduid=1597738524154116867159&pdpin=&coord=&detailedAdd=&callback=jQuery5705850' ]def sendMail(url):import smtplibfrom email.mime.text import MIMEText# email 用于構建郵件內容from email.header import Header# 用于構建郵件頭# 發信方的信息:發信郵箱,QQ 郵箱授權碼from_addr = '142XXXXXXXX@qq.com'password = 'mfXXXXXXXXXXXXXXXXX'# 收信方郵箱to_addr = mail# 發信服務器smtp_server = 'smtp.qq.com'# 郵箱正文內容,第一個參數為內容,第二個參數為格式(plain 為純文本),第三個參數為編碼msg = MIMEText(url + ' 有口罩啦', 'plain', 'utf-8')# 郵件頭信息msg['From'] = Header(from_addr)msg['To'] = Header(to_addr)msg['Subject'] = Header('有口罩啦')# 開啟發信服務,這里使用的是加密傳輸server = smtplib.SMTP_SSL(host=smtp_server)server.connect(smtp_server, 465)# 登錄發信郵箱server.login(from_addr, password)# 發送郵件server.sendmail(from_addr, to_addr, msg.as_string())# 關閉服務器server.quit()flag = 0 while (1):try:session = requests.Session()session.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/531.36","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","Connection": "keep-alive"}print('第' + str(flag) + '次 ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))flag += 1for i in url:# 商品urlskuidUrl = 'https://item.jd.com/' + i.split('skuId=')[1].split('&')[0] + '.html'response = session.get(i)if (response.text.find('無貨') > 0):print('無貨 : ' + skuidUrl)else:print('有貨啦! 有貨啦! 有貨啦! : ' + skuidUrl)sendMail(skuidUrl)time.sleep(5)except Exception as e:import tracebackprint(traceback.format_exc())print('異常')time.sleep(10)上面的收件郵箱是我的163網易郵箱,發件郵箱是QQ郵箱,發件密碼(不是QQ登陸密碼)的獲取和發件功能需要在QQ郵箱的 “設置-賬戶” 里開啟如下所示功能:
效果演示
在Pycharm執行以上腳本,如下圖所示:
此時查看網易云郵箱,收到到貨提醒郵件:
小結
真實使用情況下可以在VPS主機持續執行該腳本。但問題來了,爬京東違法不,會不會蹲監獄?個人感覺和12306網站同理,也就是我只買我自己用的應該不會進去,但是黃牛會進。最后需要注意的是不要把腳本的爬取頻率調的太高,避免被京東反爬蟲。
總結
以上是生活随笔為你收集整理的Python爬虫-京东商品到货自动邮件通知的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES6新特性
- 下一篇: VMware、配置VMware vSph