一. 写在前面的话

最近项目忙得差不多了,要开始准备毕业论文了,所以我想把一些国外论文的pdf,以及一些英语相关的新闻推送到我的pad上面,这样就不用到处找了,直接保存就行。当然不能光看论文啊,也要放松一下啊(说实话,纯英文的文章很枯燥)。然后就想到把微博热搜也顺便推送到我的邮箱里面,好了废话不多说了,代码敲起(

二. 抓取微博热搜首页

进入 热搜首页,只有10条阅读量最高的微博,我们就是要把标题和链接抓取,最后写成html的格式发给邮箱,让邮箱里面可以点击。如果你用Python的requests库去请求,你会发现返回的html里面body是空的,没错就是空的。这里会有一个bug,新浪并没有把网页的源码直接返回给你,而是把源码放到了<script>标签里,我猜他这么做也是为了防爬。我们看看倒数第二个<script>标签会发现里面几乎是一个字典数据,里面有一个html的key,我们只要将它取出来再去解析,基本就ok了。
具体的抓取规则见下:我已经写了注释,这里用的是requests和xpath,个人感觉xpath比较好用,最后我只用了标题和链接。

三. 邮箱配置以及发送邮件

这里我用的是QQ邮箱,我们去邮箱的设置里面打开SMTP服务就可以了,开启成功后会给你一个授权码,这个授权码就相当于我们邮箱的密码,一定要保存好。具体操作如下:
1. 进入邮箱的设置界面
2. 点击“账户”这个tab,然后去打开SMTP服务
然后我们就可以使用SMTP服务了,下面开始写发邮件的函数:

四. 定时获取热搜并发送

我们可以用一个定时器Timer,让它在后台自己运行,比如每隔半个小时就去发一次邮件,当然时间我们可以自己定。也可以设定多个联系人,推送到多个邮箱。

五. 最后效果以及代码

我们可以直接点击进入热搜的详情界面,效果如下:
具体代码如下:
import requests
from lxml import etree
import json
from email.message import Message
import smtplib
from threading import Timerclass Weibo:# 初始化 (发件人邮箱,发件人邮箱密码,收件人邮箱)def __init__(self, sender, password, receiver):self.sender = senderself.password = passwordself.receiver = receiver      # 处理爬取的信息def handle(self):url = 'http://s.weibo.com/top/summary?cate=homepage'headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1'}response = requests.get(url, headers=headers)result = response.texthtml = etree.HTML(result)# html内容content = html.xpath('//script/text()')[-2]# 得到网页的字典数据,利用json解析start = content.find('(')substr = content[start+1:-1]dict_data = json.loads(substr)# 解析出来的html数据html_data = etree.HTML(dict_data['html'])# 热搜榜排名order = html_data.xpath('//tr/td[1]/span/em/text()')# 热搜榜标题title = html_data.xpath('//tr/td[2]/div/p/a/text()')# 热搜榜链接url = html_data.xpath('//tr/td[2]/div/p/a/@href')# 热搜榜访问量view = html_data.xpath('//tr/td[3]/p/span/text()')return title, url# 发送邮件,这里直接用html方式发送def sendEmail(self):t, u = self.handle()html_content = '''<html><body><a href=" ''' + 'http://s.weibo.com' + u[0] + ' ">' + t[0] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[1] + ' ">' + t[1] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[2] + ' ">' + t[2] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[3] + ' ">' + t[3] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[4] + ' ">' + t[4] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[5] + ' ">' + t[5] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[6] + ' ">' + t[6] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[7] + ' ">' + t[7] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[8] + ' ">' + t[8] + '''</a></p><br><a href=" ''' + 'http://s.weibo.com' + u[9] + ' ">' + t[9] + '''</a></p><br></body></html>'''msg = Message()# 邮件标题msg['Subject'] = '微博实时热搜'# 邮件发送者msg['From'] = self.sender# 邮件接受者msg['To'] = self.receiver# 邮件内容格式msg.set_type('text/html')# 邮件内容msg.set_payload(html_content, 'utf-8')try:smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)smtp.login(self.sender, self.password)smtp.sendmail(self.sender, self.receiver, msg.as_string())smtp.quit()print('发送成功!')except smtplib.SMTPException:print('发送失败')# 每隔半小时发送邮件(定时任务)def run_task(self):self.sendEmail()task = Timer(1800, self.run_task)task.start()      if __name__ == '__main__':w = Weibo('你的QQ邮箱', '授权码', '接受者邮箱')task = Timer(1, w.run_task)task.start()

六. 结束语

学习Python已经有大半年了,总是想用来做点什么,随着越来越深入,不得不说我爱Python,真的很强大。大家可以用这个给自己喜欢的男神或者女神推送一些感兴趣的东西,或者去了解他们的一些东西推送到自己邮箱里,哈哈。

Python实现微博热搜推送相关推荐

  1. php获取微博热搜,Python获取微博热搜的方法

    原标题:Python获取微博热搜的方法 微博热搜的爬取需要用到lxml和requests两个库 url=https://s.weibo.com/top/summary?Refer=top_hot&am ...

  2. python爬虫微博热搜_Python网络爬虫之爬取微博热搜

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 url= https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&am ...

  3. 基于python的微博热搜爬取及数据分析

    刚学python爬虫,用爬虫爬取新浪微博热搜,看看效果如何,也是对这段时间学习python的总结. 一.目的: 抓取新浪微博2020年1月3日星期五的热搜榜,将抓取到的数据进行动态展示,并生成当天的微 ...

  4. python微博涨粉_如何用 Python 让微博热搜榜动起来

    今天教大家如何用 Pyecharts 制作微博热搜榜动态展示视频 先上视频看看效果: 教程主要有2部分: 一是 Python 爬取微博热搜内容 二是用 pyecharts 制作动态视频 下面给大家详细 ...

  5. python热搜排行功能_摸鱼神器——使用Python自制微博热搜榜

    呀呀呀呀呀~今天的小分享貌似只通过新浪微博涉猎热点...于是我就在想,如果大家上班摸鱼[先声明,我从不摸鱼!],又不方便打开新浪那么大的logo界面八卦,就可以通过命令行一键实时观察我们的热搜榜.嘻嘻 ...

  6. python爬取微博热搜并存入表格_python爬虫进阶之爬取微博热搜存入Mysql

    在编程中,我们如果想要把数据转入数据库中,首先会选择 MySQL数据库.因为MySQL数据库体积小.速度快.总体拥有成本低.开放源代码,其有着广泛的应用,例如我们使用python爬虫微博热搜,就可以使 ...

  7. python 爬虫热搜_Python网络爬虫之爬取微博热搜

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 1.分析网页的源代码:右键--查看网页源代码. 从网页代码中可以获取到信息 (1)热搜的名字都在 的子节点里 (2)热搜的排名都在 ...

  8. python 爬关键词,Python爬虫实战:爬取微博热搜关键词

    一.爬取微博热搜关键词需要的第三方库 1.requests 2.BeautifulSoup 美味汤 3.worldcloud 词云 4.jieba 中文分词 5.matplotlib 绘图 二.爬取微 ...

  9. Python爬虫爬取微博热搜保存为 Markdown 文件

    微博热搜榜python爬虫,仅供学习交流 源码及注释: # -*- coding=UTF-8 -*- #!usr/bin/env pythonimport os import time import ...

最新文章

  1. 一文看懂Tomcat、Nginx和Apache的区别
  2. fedora,linux mint 命令行(终端)打开目录
  3. 漂亮的HTML表格 - ebirdfighter的日志 - 网易博客
  4. Java程序员从笨鸟到菜鸟之(九十一)跟我学jquery(七)jquery动画大体验
  5. 怎么把php的文件链接成html,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...
  6. mysql gbk支持_mysql如何支持gbk编码
  7. wxWidgets:wxTextWrapper类用法
  8. boost::mpl模块实现find_if相关的测试程序
  9. C++若不想使用编译器自动生成的函数,就该明确拒绝
  10. 【Linux】一步一步学Linux——nslookup命令(161)
  11. linux 下oracle基于raw扩充表空间步骤
  12. Asp.Net MVC 3【Filters(过滤器)】
  13. 5. Document open() 方法
  14. python pywin32模块详解_python模块win32com用法详解
  15. UC浏览器去广告、联网、升级(支持新版8.1)
  16. 教你快速设计正交试验及试验数据分析
  17. 论文查重怎么看查重率
  18. 为Linux安装CHM阅读器
  19. 酷炫的交互动画和视觉效果
  20. 乐博Android客户端(新浪微博)1.01发布,欢迎各位童鞋试用

热门文章

  1. BOJ 1433 Tom 的潜望镜 优先队列+BFS
  2. 基于MATLAB APP Designer 和 Python 的音视频剪辑
  3. LeetCode知识点总结 - 1413
  4. 如何使用数据包破解游戏 - 从这里开始
  5. Linux 虚拟鼠标,键盘 之一。
  6. 微信小程序下载图片获取相册授权,保存视频或图片到手机相册
  7. 带刺玫瑰特别美?OLED屏幕画面美但眼睛会累
  8. 带着孩子学数学--经验总结1:乘法怎么教,小学数学阶段等等
  9. html滚动条固定前几行,bootstrapTable定位行固定滚动条
  10. 简单的基于规则的汉语拼音分词