[新手開源] 爬取韓寒「一個」文章且自動郵件發送功能

源碼地址:https://github.com/xcc3641/pySendOneToEmailhtml

準備

  • 一臺雲服務器python

  • 寫好的Python腳本linux

效果

由於如今「一個」的Android客戶端啓動愈來愈慢,並且不少本身不感興趣的東西(我只是想看看文章),因此就寫了這個小爬蟲。它能夠在「一個」更新後把我要的內容發到個人郵箱裏。git

放在雲服務器裏,因此不用擔憂電費啊其餘問題~github

實踐

雲服務器

本身配置的是阿里雲的服務器,學生特惠9.9,Ubuntu系統。這個系統自帶了Python2.7環境,因此不用本身手動去安裝。編程

本地是用的Window10系統,最好安裝下SecureCRSecureFXPortable。遠程鏈接本身的服務器,並且命令行和文件操做會簡便不少。ubuntu

由於「一個」是天天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的用法,感受仍是挺容易上手的。具體的實現都不難,都是基礎的爬蟲知識,並且「一個」並無反爬蟲的設定,因此蠻適合初學者的。

用工具方便本身,我以爲這就是本身編程的意義,這讓我很開心。

相關文章
相關標籤/搜索