[新手开源] 爬取韩寒“一个”文章且自动邮件发送功能

news/2024/7/3 17:29:54 标签: 爬虫, 移动开发, python

源码地址:https://github.com/xcc3641/pySendOneToEmail

准备

  • 一台云服务器

  • 写好的Python脚本

效果

因为现在“一个”的Android客户端启动越来越慢,而且很多自己不感兴趣的东西(我只是想看看文章),所以就写了这个小爬虫。它可以在“一个”更新后把我要的内容发到我的邮箱里。

放在云服务器里,所以不用担心电费啊其他问题~

实践

云服务器

自己配置的是阿里云的服务器,学生特惠9.9,Ubuntu系统。这个系统自带了Python2.7环境,所以不用自己手动去安装。

本地是用的Window10系统,最好安装下SecureCRSecureFXPortable。远程连接自己的服务器,而且命令行和文件操作会简便很多。

因为“一个”是每天22点会更新,所以自己的服务器要做一个定时服务,ubuntu下自带了Crontab定时任务。

配置Crontab

  1. 加入需要执行的脚本

    crontab -e
    1 22 * * * 路径/python 路径/xxx.py
    保存重启 /etc/init.d/cron restart
  2. Python最好写全路径,这是一个坑

  3. 需要在root用户下进行

  4. 具体的Crontab可以参考Crontab

Python代码

这里主要是用到了python自带的邮件服务的库和第三方网络解析库,代码量不多而且也不难,有编程基础的很容易学会。

邮件相关

邮件类库

   from email.mime.multipart import MIMEMultipart
   from email.header import Header
   from email.mime.text import MIMEText
   from email.utils import parseaddr, formataddr
   import smtplib

配置邮件&发送邮件的关键代码

    msg = MIMEMultipart()

    msg['From'] = _format_addr(u'Xie CC <%s>' % from_addr)
    msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
    msg['Subject'] = Header(u'The One    ' + title, 'utf-8').encode()

    msg.attach(MIMEText('<html><body><div style="text-align: center;"><p><img src="' + img + '"></p></div>' +
                        '<p style="text-align:center;\"> <br /><br /><strong><span style="font-size:14px;\">' + text +
                        '</span></p><br /><br /><br /><br /><br />' + story + '</body></html>', 'html', 'utf-8'))

    server = smtplib.SMTP(smtp_server, 25)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()

这里自己就不详细介绍这个库,具体可以参考这个教程,Python不是很难理解.

爬取信息

类库

   import requests
   from bs4 import BeautifulSoup

有一次用urllib,urllib2发现会遇到各种编码问题需要自己去解决,特别烦人。然后转到了requests这个库,完全没有遇到像url那样恶心的编码问题,而且很多需求都可以满足,所以后面爬静态网页都习惯用这个库了。

以前还是蛮喜欢用正则的,这次就学习了下bs4的用法,感觉还是挺容易上手的。具体的实现都不难,都是基础的爬虫知识,而且“一个”并没有反爬虫的设定,所以蛮适合初学者的。

用工具方便自己,我觉得这就是自己编程的意义,这让我很开心。


http://www.niftyadmin.cn/n/1449482.html

相关文章

python重复元素判定、编写一个函数、接受列表作为参数_python重复元素判定、编写一个函数、接受列表作为参数_Python。重复元素判定。编写一个函数,接受列表作为参数......

代码如下&#xff1a;def func1(num_list):if len(num_list) ! len(set(num_list)):return Trueelse:return Falseif __name__ __main__:num_list [[1, 2, 3, 4], [6, 7, 8], [4, 5, 6, 6, 6]]for one_list in num_list:print(func1(one_list))运行结果&#xff1a;扩展资料p…

uva 1378 - A Funny Stone Game(组合游戏)

题目链接&#xff1a;uva 1378 - A Funny Stone Game 题目大意&#xff1b;两个人玩游戏&#xff0c;对于一个序列&#xff0c;轮流操作&#xff0c;每次选中序列中的i&#xff0c;j&#xff0c;k三个位置要求i<j≤k,然后arr[i]减1&#xff0c;相应的arr[j]和arr[k]加1&…

centos修改磁盘uuid_linux下磁盘分区UUID及label设置

系统版本&#xff1a;centos7# e2label 查看分区 label (卷标)[rootlocalhost ~]# e2label /dev/xvda3e2label: Bad magic number in super-block while trying to open /dev/xvda3Couldnt find valid filesystem superblock.这里是因为 e2label 无法读取xfs文件系统&#xff0…

Java 理论与实践: 正确使用 Volatile 变量(转)

Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”&#xff1b;与 synchronized 块相比&#xff0c;volatile 变量所需的编码较少&#xff0c;并且运行时开销也较少&#xff0c;但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效…

java owl文件_RDFLIB中的OWL文件查询执行错误

我正在尝试在OWL文件上进行SPARQL查询(请参阅pastebin)&#xff0c;但这是我第一次处理OWL文件&#xff0c;所以我在Python中使用RDFLIB来进行SPARQL查询 . 当我运行代码时&#xff0c;我得到一个错误(如下所示代码)&#xff0c;我不明白 . 可能是什么导致了这个&#xff1f;代…

为什么 Sessions 突然消失(转)

问&#xff1a; 为什么 Sessions 突然消失了&#xff1f; 答&#xff1a; session很象临时COOKIE&#xff0c;只是信息保存在服务器上。&#xff08;客户机上保存的是SessionID&#xff09;所以有很多的原因来解释你的session变量为什么会消失。 使用者的浏览器不接受cookie。s…

vue页面自适应屏幕宽高_Vue 实现大屏页面的屏幕自适应

1. 在配置文件设置大屏设计的尺寸1920*1080//appConfig.jsexport default{screen:{width:1920,height:1080,scale:20}//大屏设计宽高}2. 定义resetScreenSize.jsimport appConfig from ../config/baseexport function pageResize(callback) {let init () > {console.log(wi…

sniffer 简介

http://www.doc88.com/p-095375416629.html 介绍sniffer的工作原理及简单介绍。转载于:https://www.cnblogs.com/disneyland/p/4485163.html