python微博热点_用 Python 监控知乎和微博的热门话题
前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: TED Crossin的编程教室
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
知乎热榜中的内容热度值,是根据该条内容近24小时内的浏览量、互动量、专业加权、创作时间及在榜时间等维度,综合计算得出的。知乎热榜即根据内容热度值制定的排行榜。
微博的热度值是根据该篇微博被转发、点赞数和微博发布时间等各项因素,来算出热度基数,再与热度权重相加,得出最终的热度值。微博热门即话题热度排行榜。
今天我们要做的就是将相关排行榜中的话题内容爬取下来当作数据素材。换句话说,我们要把页面上排好的信息,通过代码读取并保存起来。
1. 爬取网页内容
Python 爬虫通常采用 requests 库来处理网络请求。这里关于 requests 的方法和参数暂不展开。
知乎热榜
微博热门
这里有两点要注意:
1、我们选用的网址链接在未登录状态下也可访问,因此 requests 方法中的参数为空也不影响。但爬虫时更多的情况是需要登陆状态,因此也就要求通过设置不同参数来模拟登陆去进行相关操作。2、通过 requests 模块获取的网页内容,对应的是在网站上右键单击,选择“显示网页源代码”后展现的页面。它与我们实际看到的网页内容或者 F12 进入开发者模式中看到的网页 elements 是不同的。前者是网络请求后返回结果,后者是浏览器对页面渲染后结果。
2. 解析爬到的内容
第一步爬到的是整个页面内容,接下来要在所有内容中去对目标定位,然后将其读取并保存起来。
这里我采用的是 BeautifulSoup,因为学爬虫最先接触这个,用起来也蛮顺手。通过 BeautifulSoup 提供的方法和参数,可以很便捷定位到目标。
在知乎热榜的网页源代码中,拉到最下方可以看到如下:
在源代码中网页的 script 部分,有现成的整理好的热榜数据。所以我们为了减少工作量,直接通过 BeautifulSoup 取出 script 中内容,再用正则表达式匹配热榜数据列表处的内容。
1 importrequests2 importre3 from bs4 importBeautifulSoup4 5 headers={"User-Agent":"","Cookie":""}6 zh_url = "https://www.zhihu.com/billboard"
7 zh_response = requests.get(zh_url,headers=headers)8 9 webcontent =zh_response.text10 soup = BeautifulSoup(webcontent,"html.parser")11 script_text = soup.find("script",id="js-initialData").get_text()12 rule = r'"hotList":(.*?),"guestFeeds"'
13 result =re.findall(rule,script_text)14 15 temp = result[0].replace("false","False").replace("true","True")16 hot_list =eval(temp)17 print(hot_list)
这里我利用了 script 中热榜数据的列表结构,在定位取出相关字符串后,先将 js 中的 true 和 false 转化为 Python 中的 True 和 False,最后直接通过 eval() 来将字符串转化为直接可用的数据列表。
运行代码结果如图:
至于对微博热门的解析,就是中规中矩地利用 BeautifulSoup 来对网页元素进行定位获取:
1 importrequests2 from bs4 importBeautifulSoup3 4 5 url = "https://s.weibo.com/top/summary"
6 headers={"User-Agent":"","Cookie":""}7 wb_response = requests.get(url,headers=headers)8 webcontent =wb_response.text9 soup = BeautifulSoup(webcontent,"html.parser")10 index_list = soup.find_all("td",class_="td-01")11 title_list = soup.find_all("td",class_="td-02")12 level_list = soup.find_all("td",class_="td-03")13 14 topic_list =[]15 for i inrange(len(index_list)):16 item_index = index_list[i].get_text(strip =True)17 if item_index=="":18 item_index = "0"
19 item_title = title_list[i].a.get_text(strip =True)20 iftitle_list[i].span:21 item_mark = title_list[i].span.get_text(strip =True)22 else:23 item_mark = "置顶"
24 item_level = level_list[i].get_text(strip =True)25 topic_list.append({"index":item_index,"title":item_title,"mark":item_mark,"level":item_level,"link":f"https://s.weibo.com/weibo?q=%23{item_title}%23&Refer=top"})26 print(topic_list)
通过解析,将微博热门数据逐条存入列表中:
后续对拿到的数据加以处理展示,即可得到很多有趣的应用或实现某些功能。例如集成诸多平台排行榜的 “今日热榜”:
因为并未展开爬虫细节,今天的总结也比较简单:
1、首先在选取要爬的网址时要给自己降低难度,例如同样是知乎热榜,zhihu.com/hot 需要登陆,而 zhihu.com/billboard 无需登录便可访问2、解析爬取到的内容时,要结合具体页面内容选择最便捷的方式。当需要批量爬取相似页面时,也要尽量整理通用的解析策略。
完整代码
weibo_top.py
1 importrequests2 from bs4 importBeautifulSoup3 4 url = "https://s.weibo.com/top/summary"
5 headers = {"User-Agent": "", "Cookie": ""}6 wb_response = requests.get(url, headers=headers)7 webcontent =wb_response.text8 soup = BeautifulSoup(webcontent, "html.parser")9 index_list = soup.find_all("td", class_="td-01")10 title_list = soup.find_all("td", class_="td-02")11 level_list = soup.find_all("td", class_="td-03")12 13 topic_list =[]14 for i inrange(len(index_list)):15 item_index = index_list[i].get_text(strip=True)16 if item_index == "":17 item_index = "0"
18 item_title = title_list[i].a.get_text(strip=True)19 iftitle_list[i].span:20 item_mark = title_list[i].span.get_text(strip=True)21 22 else:23 item_mark = "置顶"
24 item_level = level_list[i].get_text(strip=True)25 topic_list.append({"index": item_index, "title": item_title, "mark": item_mark, "level": item_level,26 "link": f"https://s.weibo.com/weibo?q=%23{item_title}%23&Refer=top"})27 print(topic_list)
zhihu_billboard.py
1 importrequests2 importre3 from bs4 importBeautifulSoup4 5 headers={"User-Agent":"","Cookie":""}6 zh_url = "https://www.zhihu.com/billboard"
7 zh_response = requests.get(zh_url,headers=headers)8 9 webcontent =zh_response.text10 soup = BeautifulSoup(webcontent,"html.parser")11 script_text = soup.find("script",id="js-initialData").get_text()12 rule = r'"hotList":(.*?),"guestFeeds"'
13 result =re.findall(rule,script_text)14 15 temp = result[0].replace("false","False").replace("true","True")16 hot_list =eval(temp)17 print(hot_list)
python微博热点_用 Python 监控知乎和微博的热门话题相关推荐
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python微博热点_50行Python代码,一键获取微博热点
小编闲暇时喜欢看热点,会收集微博,微信搜一搜上的热点,了解一下最近的娱乐八卦新闻.但是在浏览微博的时候,想把微博热点给复制下来,但是却怎么也复制不了,鼠标一放上去就变成了"小手"的 ...
- python爬虫现状_基于Python的微博爬虫系统研究
基于 Python 的微博爬虫系统研究 陈政伊 袁云静 贺月锦 武瑞轩 [摘 要] [摘 要]随着大数据时代到来,爬虫的需求呈爆炸式增长,以新浪微 博为代表的一系列社交应用蕴含着巨大的数据资源.以新浪 ...
- python 免费空间_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
- python培训班-Python培训机构_高品质Python线下开发培训班推荐-黑马程序员
Python编程基础基础班1 课时:15天技术点:97项测验:2次学习方式:线下面授 学习目标 1.掌握Python开发环境基本配置|2.掌握运算符.表达式.流程控制语句.数组等的使用|3.掌握字符串 ...
- python 创意项目_针对python开发人员的10个很棒的python项目创意
python 创意项目 The joy of coding Python should be in seeing short, concise, readable classes that expre ...
- 用python读取股票价格_使用Python写一个量化股票提醒系统
大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...
- python deepcopy函数_用Python解数独[6]:递归获得最终答案
目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...
最新文章
- JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc)
- 解决用navicate远程连接数据库出现1045 access denied for user 'root'@'localhost' using password yes...
- php中添加分类的界面设计,zblog php新增自定义分类模板和文章模板
- 第十八天 DNS服务原理及bind详细配置
- Nginx的配置实例(反向代理实例 )
- 面试招聘——操作系统专场(一)
- java抽奖_Java实现抽奖功能
- 如何统计当前Spark程序有多少分区?
- mysql has gone away 自动连接_MySQL-出现 MySQL server has gone away 原因和解决方法
- Python字典学习
- Linux操作系统[下载安装][命令][工具使用]
- 字母数字下划线常用正则表达式
- Python+Opencv身份证号码区域提取及识别
- Fibonacci数列的递推C语言详解:Fn=Fn-1+Fn-2
- 华3C交换机调试基本
- 蓝桥杯C语言算法提高:复数归一化
- 笔记:期权定价-无套利理论
- Java 应用一般架构
- 利率市场化冲击传统资产负债管理 金融壹账通助力银行科技转型
- PORIS门禁控制器
热门文章
- 如何给SAP Cloud Platform的CloudFoundry环境里的subaccount添加quota
- npm install的代理问题
- 用nodejs读取github上某仓库的某条issue明细
- WebClient UI删除搜索条件的后台处理,以及max hit的处理逻辑
- ABAP Authorization trace工具
- SAP Fiori gateway OData开发重要的tcode SEGW背后的数据库表
- SAP Spartacus初始化时和user token相关的APP INITIALIZER
- wiki的watch设置
- 一个拥有12年SAP CRM WebClient UI开发经验的开发人员的分享
- 如何处理SAP CRM错误消息the item category X is not permitted