批量抓取羊毛网站信息,定时自动发送到邮箱进行阅览

前几天闲来无事,看到了一个羊毛线报网站,发现每日都在更新一些比较好的内容,比如领券、云盘、加油优惠、免费会员等一手信息,自己按照操作还撸了不少的优惠,但是每天手动打开这个网站还是挺麻烦的,主要有两点功能。
在这里插入图片描述

  • 自动抓取最新的羊毛日报信息
  • 将获取到的信息自动发送到邮箱

这样利用每天上班在地铁上的时间,就可以阅览下信息,如果有价值就可以直接操作了,非常的方便!

代码地址

  • https://github.com/AnTi-anti/Python_Demo

思路

抓取内容

虽然网页有很多优惠信息,但是并不是所有的信息都值得被推送,比如有些过期了的优惠活动,这里我默认抓取前五条时间最新的信息,如果你有需求,也可以自己修改。

网页的元素也是简单到不能再简单了,没有反爬,也不需要登录。
所有的信息都在下面这个li标签中

liTags = soup.find_all('li', attrs={
    
    'class': 'grid-item post-list-item'})

在这里插入图片描述
至于元素,我们只要文本内容、链接和时间就可以。
在这里插入图片描述
直接用BS4进行抓取就可以。

首先获取网页内容,我们用一个字典进行存储。

def get_content():
     url = 'https://ym.today/yangmao'
     ret = requests.get(url)
     test = ret.text
     comments = []
     soup = BeautifulSoup(test, 'lxml')
     liTags = soup.find_all('li', attrs={
    
    'class': 'grid-item post-list-item'})
     for li in liTags:
          comment = {
    
    }
          try:
               comment['content'] = li.find('a').text.strip()

               comment['URL'] = li.find('a')['href']
               comment['time'] = li.find('time')['datetime']
               comments.append(comment)
          except:
               print('出了点小问题')

     return comments

在这里插入图片描述
接着,为了后续处理方便,我们将字典存储为一个CSV表格。

def Out2File(dict):
    df = pd.DataFrame()
    list_content = []
    list_url = []
    list_time = []
    for comment in dict:
        list_content.append(comment['content'])
        list_url.append(comment['URL'])
        list_time.append(comment['time'])
    df['content'] = list_content
    df['url'] = list_url
    df['time'] = list_time
    df = df.head(6)
    df.to_csv('羊毛.csv', index=False)  # 输出为csv文本格式
    return df

在这里插入图片描述
最后就是发送到邮箱这一步骤了,这里我们采用的邮箱模板是QQ邮箱,如果你想要别的邮箱,也可以自己选择对应的发送模板。
需要你自己修改的参数如下

  • 发送人的邮箱
  • 接收人的邮箱
  • 接收人邮箱的smtp 值
  • 指定发送的时间

如何获取SMTP值,打开QQ邮箱,点击设置,账户,
在这里插入图片描述
找到IMAP/SMTP,点击开启,吧得到的SMTP值复制到代码中即可。
在这里插入图片描述

def email():
     df = pd.read_csv('羊毛.csv')
     number = '发送人的邮箱'
     smtp = ''
     to = '接收人的邮箱'  # 可以是非QQ的邮箱
     mer = MIMEMultipart()
     # 设置邮件正文内容
     head = '''
    <p>羊毛最新信息</p>
    <p><a href="{}">{}--{}</a></p>
    <p>羊毛最新前五条信息</p>
    <p><a href="{}">{}--{}</a></p>
    <p><a href="{}">{}--{}</a></p>
    <p><a href="{}">{}--{}</a></p>
    <p><a href="{}">{}--{}</a></p>
    <p><a href="{}">{}--{}</a></p>
    '''.format(df.iloc[0, :]['url'], df.iloc[0, :]['content'],df.iloc[0, :]['time'],
               df.iloc[1, :]['url'], df.iloc[1, :]['content'],df.iloc[1, :]['time'],
               df.iloc[2, :]['url'], df.iloc[2, :]['content'],df.iloc[2, :]['time'],
               df.iloc[3, :]['url'], df.iloc[3, :]['content'],df.iloc[3, :]['time'],
               df.iloc[4, :]['url'], df.iloc[4, :]['content'],df.iloc[4, :]['time'],
               df.iloc[5, :]['url'], df.iloc[5, :]['content'],df.iloc[5, :]['time'])
     mer.attach(MIMEText(head, 'html', 'utf-8'))

     fujian = MIMEText(open('羊毛.csv', 'rb').read(), 'base64', 'utf-8')
     fujian["Content-Type"] = 'application/octet-stream'  # 附件内容
     fujian.add_header('Content-Disposition', 'file', filename=('utf-8', '', '羊毛.csv'))
     mer.attach(fujian)

     mer['Subject'] = '每日羊毛信息'  # 邮件主题
     mer['From'] = number  # 发送人
     mer['To'] = to  # 接收人

     # 5.发送邮件
     s = smtplib.SMTP_SSL('smtp.qq.com', 465)
     s.login(number, smtp)
     s.send_message(mer)  # 发送邮件
     s.quit()
     print('成功发送')

成功接收的右键格式如下:
在这里插入图片描述
这样就可以愉快的浏览信息了。

如果不想每天开着脚本,还可以使用Windows任务计划自动运行Python程序,也是很方便的。

参考文献

猜你喜欢

转载自blog.csdn.net/weixin_35770067/article/details/119787274