如何利用Python脚本自动抓取微信公众号更新并发送至邮箱
作为一名“程序员”,我们每天都会阅读一些书籍、博客或名人的公众号,生怕被技术淘汰。但订阅多个公众号,每天查看公众号是否有新消息,也浪费了大量的时间和精力。 ,如果公众号文章有更新,可以自动发送到邮箱。这样不仅可以在一个环境下查看多个公众号的文章,还可以节省我们查看多个公众号所浪费的时间。

作为技术人员,在给别人提供方便的同时,也要为自己提供遍历,所以写个脚本就可以了。
#使用的库
-wechatsogou()
>**wechatsogou** 基于搜狗微信搜索的微信公众号爬虫接口,可扩展为基于搜狗搜索的爬虫
**代码**
注释是在撰写文章时添加的,可能不符合 PEP 标准。请理解。
````蟒蛇
导入操作系统
进口泡菜
导入smtplib
从 email.header 导入标头
从 email.mime.text 导入 MIMEText
从 email.utils 导入 parseaddr, formataddr
导入请求
导入微信狗
# 发件人地址
from_address = 'zyndev@163.com'
# 发件人邮箱密码
密码=''
# 电子邮件服务器
smtp_server = 'smtp.163.com'
失败计数 = 0
失败列表 = []
发送列表 = []
# 添加一个文件,将成功发送的文章标题序列化到文件中,防止多次运行导致重复发送邮件。
file_path = '已发送文章文件'
# 一些敏感词,简单过滤即可
sensitive_words = ['蔑视链','获奖名单','成功说一口流利的英语','结婚','爱情']
ws_api = wechatsogou.WechatSogouAPI()
# 获取公众号文章信息
def get_article(gzh):
文章 = ws_api.get_gzh_article_by_history(gzh)
print(len(文章['文章']))
返回文章['文章']
# 设置编码
def _format_addr(s):
名称、地址 = parseaddr(s)
返回 formataddr((标头(name, 'utf-8').encode(), addr))
# 发送电子邮件
def send_mail(收件人地址,主题,msg_html):
服务器 = smtplib.SMTP(smtp_server, 25)
# server.set_debuglevel(1)
server.login(发件人地址,密码)
# msg = MIMEText('你好,通过 Python 发送...', 'plain', 'utf-8')
味精 = MIMEText(msg_html, 'html', 'utf-8')
msg['From'] = _format_addr('张雨楠' % from_address)
msg['To'] = _format_addr('亲爱的')
msg['主题'] = 标头(主题, 'utf-8').encode()
尝试:
server.sendmail(from_address, to_address, msg.as_string())
除了:
全局失败计数
失败计数 += 1
failed_list.append(主题)
如果 '__main__' == __name__:
#定义公众账号列表
gzh_list = ['全栈布道者', '编程人生', 'importNew', 'Python开发者', '非著名程序员',
《Python之美》《机器学习研究会》《程序员大师》《51CTO》《纯真的微笑》】
# 指定邮箱列表。这是一个建议。请将邮件列表中的发件人添加到白名单中,以减少发送失败率。
mail_list = ['hbyunan@yeah.net', '913396132@qq.com', 'zyndev@gmail.com', '935855148@qq.com']
对于 gzh_list 中的 gzh:
# 搜索公众号之前,先从文件中反序列化已发送成功的文章列表。
如果 os.path.exists(file_path):
f = 打开(文件路径,'rb')
发送列表 = pickle.load(f)
f.close()
文章 = get_article(gzh)
对于文章中的文章:
print(文章['标题'],'\n\t',文章['content_url'])
fileid = str(文章['send_id']) + '_' + str(文章['fileid'])
# 如果新文章不在文章列表中,则发送
如果 fileid 不在发送列表中:
response_text = requests.get(article['content_url']).text
send_mail(邮件列表,文章['标题'],response_text)
发送列表.append(fileid)
print('出版物数量', len(articles), '失败数量', failure_count)
打印('=' * 40)
对于fail_list中的主题:
打印(主题)
# 单篇公众号文章发送后,将新发送的文章列表序列化,防止中途退出和重复发送。
f = 打开(文件路径,'wb')
pickle.dump(sent_list, f)
f.close()
````
# 概括
库“wechatsogou”主要用于获取公众号的文章信息。对于这个库的使用,可以访问github()
可以与`windows`或`linux`的计划任务结合起来,设置为每天运行一次。
windows10设置计划任务方法()
**推荐几个公众号**
- 全栈布道者(我自己写的)
- 编程生活