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

思考

这个功能在脑壳里萌芽~就得思考如何实现,其实大概思路非常简单

获取实时热搜榜数据将实时数据在图形界面中显示出来

但是,具体的实现逻辑以及细节处理在编程中仍然是值得思考的东西~于是,我们就开始叭!

爬爬爬

要紧之事,就是来爬数据。跟着我左手右手一起打开微博,查看完整的微博热搜榜,链接如下:https://s.weibo.com/top/summary

需求如下:获取 热搜序号,热搜关键字,热搜点击量

解析页面

明确需求之后不要捉急,我们需要解析页面

通过F12打开开发者工具select选中热搜榜

解析结果:整个热搜榜数据就是一个table结构,每一条热搜都是table下的一条的tr

但是目前,我们只看到了大体的框架,还需进一步确认数据是否在 tr 中,以 李佳奇的牙 这条为例。没毛病,就在这。

但是仍然不要膨胀奥,记得确认数据是否在该url的network或者preview中。

奥拉~大家发现这个数据也没涉及到啥反爬~所以今天为了让大家有额外的收获,我们使用类来实现该过程[也是为了后面~的骚操作]。

撸阿撸代码

import requests # 使用 requests 进行请求数据from lxml import etree # 使用 lxml 进行解析数据# 定义 WbHot 类class WbHot(object):# 定义构造方法,初始化 url 以及 headers def __init__(self): self.url = "https://s.weibo.com/top/summary?cate=realtimehot" self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"} # 定义 获取html文本数据 方法 def get_hot_html(self): # 发送请求 hot_response = requests.get(url=self.url, headers=self.headers) # 接收文本数据 hot_html = hot_response.text # 将数据返回 return hot_html # 解析 html 页面 def parse_html(self): # 获取 html文本 数据 hot_html = self.get_hot_html() # 将 html文本 转为可解析的html对象 hot_html = etree.HTML(hot_html) # 通过xpath定位到 tr对象列表(里面每个元素都为一个热搜对象) pos_tr = hot_html.xpath('//div[@id="pl_top_realtimehot"]/table/tbody/tr') # 定义关键词列表 hot_title_li = [] # 定义点击量列表 hot_click_li = [] # 定义序号列表 hot_order_li = [] # 遍历tr对象列表,注意:去除第一个tr对象,因为其是箭头往上走的。 for per_tr in pos_tr[1::]: # 获取每条热搜关键字 且为[] hot_title = per_tr.xpath('./td[@class="td-02"]/a/text()') # 但是不想 hot_title_li 变为 [[],[]]..所以使用extend进行扩展 hot_title_li.extend(hot_title) # 获取每条热搜点击量 hot_click = per_tr.xpath('./td[@class="td-02"]/span/text()') hot_click_li.extend(hot_click) # 获取每条热搜序号 hot_order = per_tr.xpath('./td[@class="td-01 ranktop"]/text()') hot_order_li.extend(hot_order) # 将3个列表返回 return hot_title_li,hot_click_li,hot_order_liwb_hot = WbHot()wb_hot.parse_html()

OK,代码在此处打住,我们来看下三个列表是啥玩意儿

我们发现,三个列表中一一对应的数据实际上就是每条热搜的数据。比如:["李佳奇...","5008...","1"]

如果只要这样子表示,我们通过zip()就可以实现。但是,事实并没有我们想象的那么简单,如果需要在图形界面中显示出来,我们需要将每条热搜的数据以字符串表示出来,比如:"李佳奇...5008...1"

代码实现如下:

def cope_data(self): # 接收三个列表的数据 title_li,click_li,order_li = self.parse_html() # 将其打包每一条数据 all_data = list(zip(title_li,click_li,order_li)) # 将列表中的数据拼接为字符串 c_data = [" ".join(list(data)) for data in all_data] # 将字符串列表返回 return c_datawb_hot = WbHot()wb_hot.cope_data()

爬虫部分就完成啦~但是注意,在这里不要使用主程序入口,否则在打造页面时没法访问到爬虫数据。

打造界面

现在我们新建一个 xlwb_test.py 文件来实现图形界面的绘制。在 python 中,有 PyQt5 或者 Tkinter 等库实现图形界面,也就是在桌面弹出一个窗口,跟你打开的app类似~

在今天,我们使用PyQt5 来实现,代码如下:

import sysfrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import (QWidget, QToolTip,QPushButton, QApplication)from PyQt5.QtGui import QFontfrom weibo import WbHotclass Example(QWidget): def __init__(self): super().__init__() self.initUI() # 界面绘制交给InitUi方法 def initUI(self): # 调用wb,接收处理好的字符串列表 wb_hot = WbHot() h_data = wb_hot.cope_data() # 这种静态的方法设置一个用于显示工具提示的字体。我们使用10px滑体字体。 QToolTip.setFont(QFont('SansSerif', 10)) # 初始化count,来控制移动窗口的位置 count = 0 # 循环遍历前30条热搜 for data in h_data[:30]: # 创建一个PushButton并为他设置一个tooltip btn = QPushButton(f'{data}', self) # btn.sizeHint()显示默认尺寸 btn.resize(btn.sizeHint()) # 移动窗口的位置 btn.move(0, 20+count) count+=20 # 设置窗口的位置和大小 self.setGeometry(300, 70, 400, 600) # 设置窗口的标题 self.setWindowTitle('今日热搜榜') # 设置窗口的图标,引用当前目录下的web.png图片 self.setWindowIcon(QIcon('wb.png')) # 显示窗口 self.show()if __name__ == '__main__': # 创建应用程序和对象 app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())

又快迎来小长假~思绪已经开始起飞,希望自己在国庆可以读两本可以读懂并有收获的书,还在涉猎中。当然别忘emmm点赞~康桑思密达

python热搜排行功能_摸鱼神器——使用Python自制微博热搜榜相关推荐

  1. python热搜排行功能_手把手教你用Python+Pyecharts让微博热搜榜动起来

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

  2. python热搜排行功能_用Python做一个微博热搜榜的语音播报

    微博是一个社交平台,有高效的信息流,几乎所有人能在这上面找到自己感兴趣的内容.经常使用微博的小伙伴,大家对微博热搜榜应该都不会很陌生.每天发生了什么新闻呢,谁谁谁又上热搜了. 在这个信息社会,每天发生 ...

  3. python热搜排行功能_简单几行代码用Python爬取微博的热搜榜

    简单几行代码用Python爬取微博的热搜榜 想要实时的看微博热搜 但是又不想去微博网站看!怎么办呢?其实很简单! 我们学了这个requests_html 这个库之后 就更加的简单了! 小编只用了短短的 ...

  4. python 斗地主 图形界面_上班摸鱼必备|Python开发命令行斗地主

    原标题:上班摸鱼必备|Python开发命令行斗地主 今天给大家带来的是如何上班如何高级摸鱼: 用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐,关键是没有时间限制, ...

  5. 上班摸鱼系列|Python开发命令行斗地主

    前言 大家周末好-最近更新了太多的数据分析内容不知道各位有没有疲劳,今天给大家带来的是如何上班如何高级摸鱼:用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐,关键是 ...

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

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

  7. 【摸鱼神器】基于python的BOSS识别系统

    [摸鱼神器]基于python的BOSS识别系统 前言 一.整体设计 二.调用摄像头 三.人脸识别 1. 构建白名单库 2. 人脸匹配 四.切换屏幕 五.完整代码 写在最后 前言 Tip:本文仅供技术学 ...

  8. 为了上班摸鱼我用Python制作了俄罗斯方块?

    很多人问我我是零基础开始的小白,能学会Python嘛? 首先零基础是能学python的,很多编程大神入门之前都选择先学习Python,所以想学就大胆去学吧,没学之前谁不是零基础,就算是现在才下定决心学 ...

  9. 摸鱼神器:悄悄股票盯盘_stockAssistant 功能介绍

    此软件是一款办公室摸鱼神器,能神不知,鬼不觉的将股市行情波动一览无余,避免被领导或者同事发现. 友好的登陆界面:祝福您股市亨通,心想事成. 该软件可以使用任意名称进行注册,不保留用户信息,做到绝对隐蔽 ...

最新文章

  1. 第三次冲刺阶段第五天
  2. 李开复:天才将占领创业领域
  3. 工业以太网交换机有多少个快速以太网接口?
  4. C# 多个线程一直跑着While(true)
  5. Python Socket(未编辑)
  6. Java、JS、C++ 依然强势,Go、Kotlin 等新语言为何不能破局?
  7. 怎么用python分析数据_如何用python进行数据分析?
  8. webstorm的下载以及React环境搭建
  9. 找出水王 java_寻找水王1
  10. diskgenius克隆硬盘无法启动_用diskgenius成功拷出故障硬盘数据
  11. python时间计算天数差
  12. 3dmax中的切角chamfer能用出什么花来吗?
  13. 常用电源管理稳压IC一览
  14. [附源码]java毕业设计社区生鲜电商平台
  15. mysql mmm 扩展_Mysql - 高可用方案之MMM(一)
  16. 文献分析-利用CNKI自带的可视化分析工具
  17. error 系统错误 错误码10007_在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!...
  18. Discuz更改帖子标题的字符长度限制
  19. Wault Finance闪贷攻击溯源
  20. BAT卖不动「医疗云」:医院逃离、山头林立、行有行规

热门文章

  1. 快速启动栏消失的解决方案
  2. mysql实现评论盖楼的sql_PHP 仿网易云的评论盖楼
  3. 在线翻译软件-什么实时在线翻译软件比较好用?
  4. SAT语法常见难点之并列句
  5. kf.qq.xom/product/lol.html,LOL11月8日更新几点结束 英雄联盟11.8更新维护公告
  6. LeetCode 刷题系列 -- 1110. 删点成林
  7. python粉色倒三角形_python – 颠倒的星号三角形
  8. Android 中 字符串比较
  9. python利用列表计算斐波那契数列前30项并输出_python分享斐波那契数列示例分享 Python 分享斐波那契数列前20项和...
  10. 多任务分类训练,模型转化与c++部署