美文网首页
爬虫:定时发邮件报告简书文章数据(新手向)

爬虫:定时发邮件报告简书文章数据(新手向)

作者: netiii | 来源:发表于2020-02-27 22:10 被阅读0次

    起意

    刚在简书写了第一篇文章,认真构思整理的文章总是希望能让更多的人看见,所以分外关注文章的阅读量评论量等等。刚好最近学了点爬虫,就想写个程序能定时发邮件跟我报告我的文章各个数据情况0 v 0 ,好 !开干!

    tips:本文适合有点爬虫/python基础的新手!如果有地方不理解可以评论告诉我,我会进一步改进的,感谢!

    一、前期准备

    0、安装好python并配置好环境

    1、需要安装库:

    1)requests 2) beautifulsoup4 3) schedule 4) smtplib 5) email

    2、如何安装库:

    1)pycharm:文件->设置->project interpreter ->点击'+' ->输入想下载的库名下载即可

    2)打开cmd->输入:python -m pip install 想下载的库名

    二、爬虫分析

    我们爬虫往往分为四个步骤,a、获取数据 b、解析数据 c、提取数据 d、存储数据。获取数据是指获取到包含我们想要数据的源代码,解析数据是将源代码解析成我们可以提取的对象,提取数据就是从对象中提取出我们想要的数据,最后存储这个数据。

    下面我们的爬虫也按照这个思路展开。

    A、获取数据

    首先要确定我们想要数据在哪可以获取,以我的文章为例,我的个人主页是https://www.jianshu.com/u/1740a3278d36。可以看到,在个人主页上,就有文章的浏览量、评论量、喜欢的数据。

    image

    接下来要判断的是,想要的数据是否包含第一个请求源代码中。网页的加载是由多个请求依次加载构建成我们最后看到的完整网页。当我们用requests.get()获取网页源代码时,其实得到的只是第一个请求的源代码。故这里需要使用network来判断爬取数据是否包含在第一个请求中。

    (1)打开network(右键->检查->点击network)

    image

    (2)点击刷新,在doc中寻找第一个请求

    image

    (3)确定第一个请求是否包含数据

    image

    以上我们确定了爬取数据就在第一个请求中,代码如下:

    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
    
    url = 'https://www.jianshu.com/u/1740a3278d36'
    
    res = requests.get(url,headers=headers)  
    
    

    B、解析、提取数据

    (1)解析数据
    解析数据是将源代码转换成可以提取数据的对象的过程,这里可以用BeatufulSoup来完成,将源代码的字符串转换为可以bs对象。

    bs = BeautifulSoup(res.text,'html.parser')
    

    解析完成后,这里的bs就是可以提取数据的bs对象了

    (2)提取数据
    在bs对象中寻找想要的数据得先用find()和find_all()来提取标签,find是返回符合括号条件的第一个标签,find_all()是返回符合括号条件的所有标签。
    如find(‘div’,class_='note_list'),括号内条件为:是div标签,且类名为‘note_list’。这样就可以提取到我们想要的标签。

    所有的文章列表包含在ul class=‘note-list’标签中,一篇文章在一个li标签中,用for循环可以提取出每篇文章。

    找到文章

    文章名在li中的a class='title'标签中div class=‘meta’中包含浏览,评论,喜欢数值,第一个a是浏览量,第二个a是评论,第二个span是喜欢

    提取各个标签的完整代码如下:

        article_list = '' #存储数据
        list_ul = bs.find('ul',class_='note-list') #这个标签包含了所有文章内容
        list = list_ul.find_all('li') #提取出每篇文章
        for l in list: #对于每篇文章提取所要数据
            title = l.find('a',class_='title').text #文章标题
            meta = l.find('div',class_='meta') #meta标签包含了浏览、评论、喜欢,是它们共同的父标签
            a = meta.find_all('a') #找到其中两个a标签,第一个a就是浏览,第二个就是评论
            view = a[0].text[2:-1]  #.text即只保留下该标签的文本
            comment = a[1].text[2:-1]
            span = meta.find_all('span')
            like = span[1].text[1:]
            article_list = article_list + title + '浏览量:' + view + '评论量:' + comment + '喜欢:' + like + '\n'
    
    

    C、存储数据

    目前程序不需要把数据存储到本地,故此步只是简单把数据存储到article_list字符串中。

    三、代码模块

    1、爬虫获得文章数据

    def getData():
        # ——————————第一步————————————————————
        #获取数据
        headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
        }
        url = 'https://www.jianshu.com/u/1740a3278d36'
        res = requests.get(url,headers=headers)
        #解析数据
        bs = BeautifulSoup(res.text,'html.parser')
    
        #———————————第二、三步:提取数据—————————————————————
        article_list = ''
        list_ul = bs.find('ul',class_='note-list')
        list = list_ul.find_all('li')
        for l in list:
            title = l.find('a',class_='title').text
            meta = l.find('div',class_='meta')
            a = meta.find_all('a')
            view = a[0].text[2:-1]
            comment = a[1].text[2:-1]
            span = meta.find_all('span')
            like = span[1].text[1:]
            article_list = article_list + title + '浏览量:' + view + '评论量:' + comment + '喜欢:' + like + '\n'
        return article_list
    

    2、发邮件

    def send_email(article_list):
        mailhost='smtp.qq.com'
        qqmail = smtplib.SMTP()
        qqmail.connect(mailhost,25)
        qqmail.login(account,password)
        content= article_list
        message = MIMEText(content, 'plain', 'utf-8')
        subject = '简书文章浏览报告'
        message['Subject'] = Header(subject, 'utf-8')
        try:
            qqmail.sendmail(account, receiver, message.as_string())
            print ('邮件发送成功')
        except:
            print ('邮件发送失败')
        qqmail.quit()
    

    3、定时执行

    每天晚上7点执行job函数

    def job():
        article_list= getData()
        send_email(article_list)
    
    schedule.every().day.at('19:00').do(job)   #每天晚上7点执行job函数
    
    

    4、引用模块及主函数

    import requests
    from bs4 import BeautifulSoup
    import schedule
    import time
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    if __name__ == '__main__':
    
        account = input('请输入你的邮箱:')
        password = input('请输入你的密码:')
        receiver = input('请输入收件人的邮箱:')
        while True:
            schedule.run_pending()
            time.sleep(1)
    

    注意:主函数中我们需要输入我们发送邮件的账号和密码,这里的密码并非我们邮箱登陆密码,找到这个密码还需要一点操作(另外:邮箱设置的是qq邮箱)

    登陆qq邮箱 ,如下操作

    开启服务

    相关文章

      网友评论

          本文标题:爬虫:定时发邮件报告简书文章数据(新手向)

          本文链接:https://www.haomeiwen.com/subject/pidthhtx.html