linux定时爬虫并把内容发给自己的邮箱

1 篇文章 0 订阅
1 篇文章 0 订阅

零、前言

0、自己之前有很多爬虫经历,所以爬虫这一块没啥大问题。

1、可能 python编写邮箱发送功能 会报错。网易的错误代码 是554 ,说的是你的代码可能疑似广告行为,被拦截了(详细:https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac28218e37dcd9adbaa)。后面换成QQ邮箱就好了。

2、需要在 QQ 邮箱开启POP3/SMTP服务 (进入自己的QQ邮箱网页版==>点击'账号'==>点击'设置'==>点击'开启POP3/SMTP服务'),接着会弹出授权码,一定要记下来,因为编写py代码要用到!!

 

一、整体思路

0、自己在本机上测试成功爬取数据和发送邮箱成功后,再把相关的环境、代码部署到自己的服务器上

1、在linux服务器上,添加这个 py 脚本,这样就能在邮箱上定时收到自己想要的互联网内容了,比今日头条的推荐算法更精准哦!!

 

二、具体实现以及相关代码(以爬取  新浪热搜  为例)。

0、安装相关的库

from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL

import requests
import re

1、编写 爬取新浪热搜 的代码

# 根据不同的 url 获取到原先的 html 代码
def get_html(url):
    content = requests.get(url).text
    return content

# 根据 匹配的模式 pattern 、 要进行匹配的原文 pattern 、 是哪个咨询index 得到我们感兴趣的内容(格式化的) ===》  my_content
def get_final_content(pattern, html_content, index):
    items = re.findall(pattern, html_content)
    final_content = ''
    if(index == 1):
        final_content = get_sina_content(items)
    # elif(index == 2):
    #     final_content = get_w3cplus_content(items)

    # 返回每一个网站 所爬取的 格式化内容
    return final_content


# 获取新浪微博的 热搜
def get_sina_content(items):
    # 只获取 新浪热搜的 前5条
    count = 0
    # 前缀网址  'https://s.weibo.com'
    basic_url = 'https://s.weibo.com'
    # 返回感兴趣的内容 ===》  格式化的
    result_content = ''

    for item in items:
        count += 1
        if(count < 6):
            # print(item[0], item[1], item[2])
            result_content += (str(count) + '、' + item[1] +'\t热度:' + item[2] + '\t链接:' + basic_url + item[0] + '\n')

    # print(result_content)
    return result_content




# 爬取新浪微博热搜的 函数入口
def main_sina():
    url = 'https://s.weibo.com/top/summary'
    html_content = get_html(url)
    # print(html_content)

    pattern = re.compile('.*?<td class="td-02">.*?<a href="(.*?)" target="_blank">(.*?)</a>.*?<span>(.*?)</span>', re.S)
    final_content = get_final_content(pattern, html_content, 1)
    print(final_content)
    return final_content

2、编写 发送邮箱 的代码

def send_email(sender_qq, pwd, receiver, mail_title, mail_content):
    # qq邮箱的服务器
    host_server = 'smtp.qq.com'
    sender_qq_mail = sender_qq + '@qq.com'

    # ssl 登录
    smtp = SMTP_SSL(host_server)

    smtp.set_debuglevel(1)
    smtp.ehlo(host_server)
    smtp.login(sender_qq, pwd)

    msg = MIMEText(mail_content, 'plain', 'utf-8')
    msg["Subject"] = Header(mail_title, 'utf-8')
    msg["From"] = sender_qq_mail
    msg["To"] = receiver
    smtp.sendmail(sender_qq_mail, receiver, msg.as_string())
    smtp.quit()

3、最终的函数入口

if __name__ =='__main__':
    # sender_qq 为发件人的 qq 号码
    sender_qq = 'xxx'
    # pwd 为 qq 邮箱的授权码
    pwd = 'xxx'
    # 收件人的邮箱 receiver
    receiver = 'xxx'

    # 邮件正文
    mail_content = main_sina()
    mail_title = 'xxx'
    
    send_email(sender_qq, pwd, receiver, mail_title, mail_content)

 

4、在linux(自己的是 centos7.2+python 3.7)服务器上为该 py 文件添加定时脚本

1)当前路径所含的文件

2)设置定时脚本(crontab -e 。详细参数参考:http://www.linuxso.com/command/crontab.html);尽量两个文件写绝对路径,不然可能会出现问题!!我这里是设置过 环境变量啥的,可以直接写 python ,它就自动帮我调用 python3 !!

5、效果截图

总结:

0、自己也在玩微信公众号(IT三少),粉丝达到过5.8K+,有在盈利哦;欢迎学习交流!自己也上线过小程序(项目地址:https://github.com/CYBYOB)。本人QQ:1520112971,邮箱:1520112971@qq.com

1、虽说一路坑不少,但是凭借自己的较强的解决问题能力还是很快搞定了,以后再一些 知乎、开源中国等的爬取,每天岂不是美滋滋。

2、最近在玩 机器学习 。想训练出一个 “伪生命公式”,因为受启发于 天才J 这部网剧(感觉脑洞挺大的,弄出来公式,有空就把完整代码放在CSDN上)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值