京东口罩到货,邮件实时通知

一:前言
近日,一个名为【wuhan2020】的开源项目登上了GitHub Trending TOP榜,已收获4k+ Star
在这里插入图片描述
这是一个武汉新型冠状病毒防疫信息收集平台的开源项目,针对 2020 年初在武汉爆发的新型冠状病毒疫情,本项目旨在收集各医院、酒店、工厂、物流、捐赠、捐款、预防、治疗、动态等信息,统一收集,统一发布,以便各方之间进行信息互通,有效调配社会资源。疫情无情人有情,在疫情面前,众志成城,中国开发者们也都行动起来了,想着最近身边的人都买不到口罩,而口罩又是防疫中重要的一环,搜了搜京东,各大店铺均已售罄,想着就等到货通知吧,但是还没通知就被抢购一空,所以萌生了一个通过python爬虫的方式去抓取到货通知,这样一来,只要到货了第一时间邮件就能收到了,避免了错过抢购的最佳时机

二:爬虫实现思路
抓取京东店铺网页关键信息,当捕捉到无货信息时代表此时的口罩是售空的,否则就会通过qq邮件发送到自己的邮箱

三:主要使用到的Python模块
requests模块
模块说明:
1.Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码
2.在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作
3.requests会自动实现持久连接keep-alive
通过这个模块我们就可以完成两个重要的功能,一个是网页抓取,一个是邮件发送
如果未安装该模块,可以使用以下命令获取并安装

pip install requests

下面直接上代码

###########################################
#
#京东店铺口罩到货实时通知
#
###########################################

import requests
import time
from email.mime.text import MIMEText
from pip._internal.utils.outdated import SELFCHECK_DATE_FMT
from email._header_value_parser import Header

import smtplib
from email.mime.text import MIMEText          #用于构建邮件内容
from email.header import Header               #用于构建邮件头
# 商品链接
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=100002810158&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',
]

class Mail:
    '定义一个邮箱类'
    Msgs = ''
    #初始化发送方,接收方的邮箱信息
    def __init__(self, FromMail, Authentication, ToMail, Msg):
        self.frommail = FromMail
        self.password = Authentication
        self.tomail = ToMail
        self.msg = Msg
    
    def make_mail(self, url):
         self.Msgs = MIMEText(url + self.msg, 'plain', 'utf-8')
         self.Msgs['From'] = Header(self.frommail)
         self.Msgs['To'] = Header(self.tomail)
         self.Msgs['Subject'] = Header(self.msg)
    
    def send_mail(self, url):
            self.make_mail(url)
            print("开启邮件服务")
            server = smtplib.SMTP_SSL(host='smtp.qq.com')  # 开启发信服务,这里使用的是加密传输
            print("连接服务器")
            server.connect(host='smtp.qq.com', port=465)
            print("登录服务器")
            server.login(self.frommail, self.password)
            print("发送邮件")
            server.sendmail(self.frommail, self.tomail, self.Msgs.as_string())
            print("发送邮件成功")
            server.quit()                                                                         # 关闭服务器
 
times = 1
if __name__ == "__main__":
    mail = Mail('[email protected]', 'zndzkblqgpobjfid', '[email protected]', '口罩到货啦!!!')
while True:
    try:
        print('第' + str(times) + '次 ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        times += 1
        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"
        }
        for i in Url:
            skuidUrl = 'https://item.jd.com/' + i.split('skuId=')[1].split('&')[0] + '.html'
            response = session.get(i)
            #print(response.text)
            if (response.text.find('无货') > 0):
                print("商品链接:%s  口罩已售空" % skuidUrl)
            else:
                print("商品链接:%s 口罩已到货!!! " % skuidUrl)
                mail.send_mail(skuidUrl)
        time.sleep(60)
        
    except Exception as e:
        print("异常!!!")
        time.sleep(10)
        

四:开通POP3/SMTP服务
这里因为是第三方登录邮箱,所以需要开通qq邮箱的POP3/SMTP
开通方法如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
五:运行结果

12020-02-02 19:46:58
商品链接:https://item.jd.com/100011293950.html  口罩已售空
商品链接:https://item.jd.com/100002810158.html 口罩已到货!!! 
开启邮件服务
连接服务器
登录服务器
发送邮件
发送邮件成功
第22020-02-02 19:47:59
商品链接:https://item.jd.com/100011293950.html  口罩已售空
商品链接:https://item.jd.com/100002810158.html 口罩已到货!!! 
开启邮件服务
连接服务器
登录服务器
发送邮件
发送邮件成功

邮箱收件如下
在这里插入图片描述
六:如何增加自己要搜索的店铺
在这里插入图片描述
本篇文章到此介绍完口罩店铺到货情况爬虫思路及代码实现,希望对你们有帮助,谢谢!如果有不正确或者需要补充的地方,欢迎评论区留言!

发布了33 篇原创文章 · 获赞 7 · 访问量 8334

猜你喜欢

转载自blog.csdn.net/muchong123/article/details/104146635
今日推荐