Python | 使用wechatsogou抓取公眾號文章并發(fā)送郵件

作為一個 `coder` 我們每天都在看一些書,博客或者大牛的公眾號,生怕被技術(shù)淘汰. 但是訂閱多個公眾號,每天看公眾號是否有新消息,也要浪費大量的時間和精力,如果公眾號文章出現(xiàn)更新,能自動發(fā)送到郵件,這樣既可以在一個環(huán)境中查看多個公眾號的文章,也可以省去我們查看多個公眾號浪費的時間.

作為一個技術(shù)人員,在給他人提供便利的同時,也要給自己提供遍歷,那就寫一個腳本就好了

# 用到的庫

- wechatsogou(https://github.com/Chyroc/WechatSogou)

>**wechatsogou** 基于搜狗微信搜索的微信公眾號爬蟲接口,可以擴展成基于搜狗搜索的爬蟲

**代碼**

注釋是在寫文章的時候加上的,不一定符合 pep 標準,還請諒解

```python

import os

import pickle

import smtplib

from email.header import Header

from email.mime.text import MIMEText

from email.utils import parseaddr, formataddr

import requests

import wechatsogou

# 發(fā)件人地址

from_address = 'zyndev@163.com'

# 發(fā)件人郵箱密碼

password = ''

# 郵箱服務(wù)器

smtp_server = 'smtp.163.com'

fail_count = 0

fail_list = []

sent_list = []

# 添加一個文件,將已經(jīng)發(fā)送成功的文章標題序列化到文件,防止多次運行導致重復發(fā)送郵件

file_path = 'sent_articles_file'

# 一些敏感詞,簡單過濾一下

sensitive_words = ['鄙視鏈', '中獎名單', '成功說一口流利英語', '婚姻', '戀愛']

ws_api = wechatsogou.WechatSogouAPI()

# 獲取公眾號文章信息

def get_article(gzh):

? ? articles = ws_api.get_gzh_article_by_history(gzh)

? ? print(len(articles['article']))

? ? return articles['article']

# 設(shè)置下編碼

def _format_addr(s):

? ? name, addr = parseaddr(s)

? ? return formataddr((Header(name, 'utf-8').encode(), addr))

# 發(fā)送郵件

def send_mail(to_address, subject, msg_html):


? ? server = smtplib.SMTP(smtp_server, 25)

? ? # server.set_debuglevel(1)

? ? server.login(from_address, password)

? ? # msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

? ? msg = MIMEText(msg_html, 'html', 'utf-8')

? ? msg['From'] = _format_addr('張瑀楠 <%s>' % from_address)

? ? msg['To'] = _format_addr(' Dear ')

? ? msg['Subject'] = Header(subject, 'utf-8').encode()

? ? try:

? ? ? ? server.sendmail(from_address, to_address, msg.as_string())

? ? except:

? ? ? ? global fail_count

? ? ? ? fail_count += 1

? ? ? ? fail_list.append(subject)

if '__main__' == __name__:

? ? # 定義一個公眾號列表

? ? gzh_list = ['全棧布道士', '編程人生', 'importNew', 'Python開發(fā)者', '非著名程序員',

? ? ? ? ? ? ? ? 'Python之美', '機器學習研究會', '程序員大咖', '51CTO', '純潔的微笑']

? ? # 指定郵箱列表,這里有個建議,請郵件列表中將發(fā)件人添加到白名單,降低發(fā)送的失敗率

? ? mail_list = ['hbyunan@yeah.net', '913396132@qq.com', 'zyndev@gmail.com', '935855148@qq.com']

? ? for gzh in gzh_list:

? ? ? ? # 查找公眾號之前,先從文件中反序列化出已經(jīng)成功發(fā)送的文章列表

? ? ? ? if os.path.exists(file_path):

? ? ? ? ? ? f = open(file_path, 'rb')

? ? ? ? ? ? sent_list = pickle.load(f)

? ? ? ? ? ? f.close()

? ? ? ? articles = get_article(gzh)

? ? ? ? for article in articles:

? ? ? ? ? ? print(article['title'],'\n\t' ,article['content_url'])

? ? ? ? ? ? fileid = str(article['send_id']) + '_' + str(article['fileid'])

? ? ? ? ? ? # 如果新文章不在文章列表中,則發(fā)送

? ? ? ? ? ? if fileid not in sent_list:

? ? ? ? ? ? ? ? response_text = requests.get(article['content_url']).text

? ? ? ? ? ? ? ? send_mail(mail_list, article['title'], response_text)

? ? ? ? ? ? ? ? sent_list.append(fileid)

? ? ? ? print('發(fā)布數(shù)量', len(articles), '失敗數(shù)量', fail_count)

? ? ? ? print('=' * 40)

? ? ? ? for subject in fail_list:

? ? ? ? ? ? print(subject)

? ? ? ? # 單個公眾號文章發(fā)送完畢后,將新的已發(fā)送文章列表序列化,防止出現(xiàn)中途退出,造成重復發(fā)送

? ? ? ? f = open(file_path, 'wb')

? ? ? ? pickle.dump(sent_list, f)

? ? ? ? f.close()

```

# 小結(jié)

主要用到了 `wechatsogou` 這個庫來獲取公眾號的文章信息,關(guān)于這個庫的使用可以訪問 github(https://github.com/Chyroc/WechatSogou)

可以結(jié)合`windows` 或者 `linux` 的定時任務(wù)來設(shè)置每天運行一次

windows10 設(shè)置定時任務(wù)方法(https://jingyan.baidu.com/article/f79b7cb313f13a9145023e4a.html)

**推薦幾個公眾號**

- 全棧布道士? (我自己在寫)

- 編程人生

- importNew (基本每天都有一些java相關(guān)文章發(fā)布)

- Python開發(fā)者

- Python之美 (豆瓣大佬董偉明的公眾號,干活多)

- 51CTO

- 純潔的微笑(對于 Spring Cloud 和 Spring Boot 有疑惑可以多看看)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,597評論 19 139
  • 1、開啟公眾號開發(fā)者模式 公眾平臺的技術(shù)文檔目的為了簡明扼要的交代接口的使用,語句難免苦澀難懂,甚至對于不同的讀者...
    good7758閱讀 1,663評論 0 1
  • 無戒365訓練營極限挑戰(zhàn)第10天第七節(jié) 何柳雖然不辦公,卻仍然掌握著科室的工作動態(tài)。雖然陳世寧的姿態(tài)有些耐人尋味,...
    流花河閱讀 394評論 3 6
  • 手機里一直安裝著一個app即刻,這個app有許多的訂閱主題。有一天app給我推薦了一個主題,每天一句馬男的名句,截...
    midlight閱讀 864評論 0 1
  • 木易味的蕋茗閱讀 104評論 0 0

友情鏈接更多精彩內(nèi)容