作者 | 菜園子哇
頭圖 | 下載自東方 IC
出品 | CSDN 博客
馬上上班了,回來的路上,上班地鐵上都是非常急需口罩的。
目前也非常難買到正品、發貨快的口罩,許多藥店都售完了。
並且,淘寶上一些新店口罩庫存寫著非常多,但不發貨,不是騙錢就是採集個人信息,銷量都非常高几 W 幾十 W 的銷量。而在京東上,即使有到貨通知,但往往還沒等到通知就被搶購完了。
這時,就輪到我 Python 爬蟲出馬了!
時刻幫我盯著京東是否到貨,到貨馬上郵件通知!接下來,就讓我們一起看 Python 爬蟲如何幫你時刻盯著到貨通知,並最終自動下單。
第一步:Python 爬蟲到貨通知
首先,我們先來看幾個效果展示:
無貨展示
有貨展示
代碼如下:
<code>'''
jd旗艦店檢查到貨
'''
import requests
import time
# 有貨通知 收件郵箱
mail = '[email protected]'
# 商品的url
url = [
'https://c0.3.cn/stock?skuId=100011293950&area=19_1607_4773_0&venderId=1000078145&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=1580214678781491106132&ch=1&callback=jQuery4173314',
'https://c0.3.cn/stock?skuId=34424081673&area=19_1607_3639_0&venderId=656282&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=1580214678781491106132&ch=1&callback=jQuery7815511',
'https://c0.3.cn/stock?skuId=14567560031&area=6_318_320_44149&venderId=70651&buyNum=1&choseSuitSkuIds=&cat=9847,13533,13534&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=1580535906442142991701&ch=1&callback=jQuery660434',
'https://c0.3.cn/stock?skuId=100011293952&area=19_1607_4773_0&venderId=1000078145&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=1580214678781491106132&ch=1&callback=jQuery5497502',
'https://c0.3.cn/stock?skuId=11300307432&area=2_2824_51916_0&venderId=646174&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=1580214678781491106132&ch=1&callback=jQuery4188953',
]
def sendMail(url):
import smtplib
from email.mime.text import MIMEText
# email 用於構建郵件內容
from email.header import Header
# 用於構建郵件頭
# 發信方的信息:發信郵箱,QQ 郵箱授權碼
from_addr = '[email protected]'
password = 'alpsneahzhawbfgj'
# 收信方郵箱
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 += 1
for i in url:
# 商品url
skuidUrl = 'https://item.jd.com/' + i.split('skuId=')[1].split('&')[0] + '.html'
response = session.get(i)
# print('有貨啦! 有貨啦! 有貨啦! : ' + skuidUrl)
# sendMail(skuidUrl)
if (response.text.find('無貨') > 0):
print('無貨 : ' + skuidUrl)
else:
print('有貨啦! 有貨啦! 有貨啦! : ' + skuidUrl)
sendMail(skuidUrl)
time.sleep(5)
except Exception as e:
import traceback
print(traceback.format_exc)
print('異常')
time.sleep(10)/<code>
修改的地方:
主要修改的是以下兩個地方,完成後就可以實時監控了。
收發件郵箱修改成自己的,可以閱讀這篇 CSDN 博文:《Python 實現自動發送郵件》,https://blog.csdn.net/LeoPhilo/article/details/89074232。
第二個是,要監控的商品 URL。
Google Chrome 瀏覽器按 F12 打開,點擊需要的商品和所在的地區,找到這個 stock 開頭的 URL,複製、修改或者添加在下方。
在此提醒一下大家,注意不要把頻率調得太高,避免被京東反爬蟲。
第二步,如何實現自動下單爬蟲?
有了到貨之後,又如何實現自動下單呢,並且還能夠避免搶購,程序自動一次只買一件?
在完成第一步的基礎上,我們進入到第二步,自動下單爬蟲。
自動下單所需 Cookie 獲取:
修改位置
獲取方式
(1)打開 Google Chrome,登錄京東。
(2)按 F12 進入我的訂單頁面,過濾出 list.action url。
(3)請求下滑找到 cookie 然後複製,在代碼裡面修改就行。
最後,預祝大家都能搶到口罩,身體健康開工!
更多細節,可閱讀 CSDN 博主「菜園子哇」系列文章:
買不到口罩,京東到貨通知不靠譜,python爬蟲幫你時刻盯著
https://blog.csdn.net/cyz52/article/details/104114438
京東口罩爬蟲,到貨通知爬蟲,自動下單爬蟲、python爬蟲第二篇
https://blog.csdn.net/cyz52/article/details/104177981
京東口罩爬蟲、使用教程、第三篇
https://blog.csdn.net/cyz52/article/details/104239558
閱讀更多 CSDN 的文章