【经典爬虫案例】用Python爬取微博热搜榜!

 一、爬取目标

本次爬取的是: 微博热搜榜

(代码也可直接在下方拿):


微博热搜榜页面

分别爬取每条热搜的:

热搜标题、热搜排名、热搜类别、热度、链接地址。

下面,对页面进行分析。

经过分析,此页面没有XHR链接通过,也就是说,没有采用AJAX异步技术。

所以,只能针对原页面进行爬取。

二、编写爬虫代码

2.1 前戏

首先,导入需要用到的库:

import pandas as pd # 存入excel数据
import requests # 向页面发送请求
from bs4 import BeautifulSoup as BS # 解析页面

定义一个爬取目标地址:

# 目标地址
url = 'https://s.weibo.com/top/summary?cate=realtimehot'

定义一个请求头:

# 请求头
header = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Mobile Safari/537.36',
'Host': 's.weibo.com',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
# 定期更换Cookie
'Cookie': '换成自己的Cookie值'
}

其中,Cookie需要换成自己的Cookie值。

2.2 获取cookie

怎么查看自己的Cookie?

Chrome浏览器,按F12打开开发者模式,按照以下步骤操作:

开发者模式下,查看cookie

  1. 选择网络:Network
  2. 选择所有网络:All
  3. 选择目标链接地址
  4. 选择头:Headers
  5. 选择请求头:Request Headers
  6. 查看cookie值

2.3 请求页面

下面,向页面发送请求:

r = requests.get(url, headers=header) # 发送请求

2.4 解析页面

接下来,解析返回的页面:

soup = BS(r.text, 'html.parser')
​```
![](https://img2023.cnblogs.com/blog/2864563/202307/2864563-20230711213330436-846402627.png)
根据页面分析,每条热搜都放在了标签为section的、class值为list的数据里,里面每条热搜,又是一个a标签。
所以,根据这个逻辑,解析页面,以获取链接地址为例:
```python
items = soup.find('section', {'class': 'list'})
for li in items.find_all('li'):
# 链接地址
href = li.find('a').get('href')
href_list.append('https://s.weibo.com' + href)

页面其他元素,热搜标题、排名、热度、类别等获取代码,不再一一赘述。

2.5 转换热搜类别

其中,热搜类别这个元素需要注意,在页面上是一个个图标,背后对应的是class值,是个英文字符串,需要转换成对应的中文含义,定义以下函数进行转换:

def trans_icon(v_str):
"""转换热搜类别"""
if v_str == 'icon_new':
return '新'
elif v_str == 'icon_hot':
return '热'
elif v_str == 'icon_boil':
return '沸'
elif v_str == 'icon_recommend':
return '商'
else:
return '未知'

目前的转换函数包括了"新"、"热"、"沸"、"商"等类别。

我记得,微博热搜类别,是有个"爆"的,就是热度最高的那种,突然蹿升的最热的热点,爆炸性的。但是现在没有爆炸性新闻,所以我看不到"爆"背后的class值是什么。

后续如果有爆炸性热点,可以按照代码的逻辑,加到这个转换函数里来。

2.6 保存结果

依然采用我最顺手的to_excel方式,存入爬取的数据:

df = pd.DataFrame( # 拼装爬取到的数据为DataFrame
{
'热搜标题': text_list,
'热搜排名': order_list,
'热搜类别': type_list,
'热度': view_count_list,
'链接地址': href_list
}
)
df.to_excel('微博热搜榜.xlsx', index=False) # 保存结果数据

至此,整个爬取过程完毕。

2.7 查看结果数据

查看一下,保存到excel里的数据:

结果数据

其中,第一条是置顶热搜,所以一共是 (1+50=51) 条数据。

演示视频:
【python爬虫】用python爬取微博热搜榜数据!_哔哩哔哩_bilibili

三、获取完整源码

get完整代码(无chang分享):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何覆盖!important修饰的属性

最简单的方法 如果这个!important修饰的属性 是自己的写的,去掉这种写法,使用优先级的方式来写这个属性(.outter .inner 的优先级就会比 。outter的优先级高) 复杂的方法:用魔法打败魔法 但是这个样式来自于全局css&am…

【机器学习】智能创意工厂:机器学习驱动的AIGC,打造未来内容新生态

🚀时空传送门 🔍机器学习在AIGC中的核心技术📕深度学习🎈生成对抗网络(GANs) 🚀机器学习在AIGC中的具体应用🍀图像生成与编辑⭐文本生成与对话系统🌠音频生成与语音合成 …

uniapp小程序计算地图计算距离

我们拿到自身和目标距离经纬度 调用此方法即可计算出自身与目标的距离 最后我所展示的页面如下 具体效果可能会有点偏差 要求严格的可以在精细的计算一下

【Python】Redis数据库

Redis数据库 Unit01一、Redis1.1 概述1.2 安装1.3 Redis-cli1.4 数据类型1.5 字符处理1.6 键的命名规则 二、通用命令三、字符串(String)3.1 概述3.2 常用命令3.3 应用场景 四、列表(List)4.1 概述4.2 常用命令 五、集合(SET)5.1 概述5.3 常用命令 六、有序集合6.1 概述6.2 常用…

【行业应用】基于 Arm 虚拟硬件平台实现微信支付二维码识别的智能闸机系统

基于 Arm 虚拟硬件平台实现微信支付二维码识别的智能闸机系统 本实验过程中所显示的优惠价格及费用报销等相关信息仅在【Arm AI 开发体验创造营】体验活动过程中有效,逾期无效,请根据实时价格自行购买和体验。同时,感谢本次体验活动 Arm 导师…

解读自然语言处理:技术、应用与未来展望

引言 自然语言处理(Natural Language Processing,简称NLP)是计算机科学、人工智能和语言学的一个跨学科领域,致力于实现人与计算机之间通过自然语言进行有效沟通的能力。NLP 的核心任务是理解、解释和生成人类语言,使计…

入门二.HTB--Fawn

大佬 [Hackthebox] Fawn (FTP)_根据您的扫描,目标上运行的 ftp 版本是什么?-CSDN博客 大佬 https://www.cnblogs.com/Hekeats-L/p/16535561.html 任务一 FTP缩写 File Transfer Protocol 任务二 FTP的TCP端口 21 FTP监听的TCP端口号为21,监听的数据端口为20。 任务三 FTP…

Spring技术——介绍、初识

从这篇博客正式开始学习 Spring 。 一、整个Spring技术学习的介绍 首先先对 Spring 做一个简单的认识,并从以下3个方面了解学习Spring 技术的意义: (1)为什么要学习 Spring 技术? 1、它的市场的占有率很高&#xff…

css之浏览器兼容性

css之浏览器兼容性 内核 内核代表作品 兼容的概念和原因 Hack的副作用 常见的CSS Bug 多个图片在一起,图片套个盒子 图片在IE浏览器上有蓝色边框 解决办法:给img加上 border:0 表单元素中距离顶部元素不一样 左边input 右边button 解决办法&#x…

umijs脚手架

node 16.9.1 注意node版本的问题 node 18.20.0 这个问题其实是node与中端连接出错,无法初始化TTY(终端设备),可以用cmd命令行来创建umi项目 nvm管理node https://github.com/coreybutler/nvm-windows/releases 这是nvm-window…

Idea Git中 unversioned files的处理

项目中,使用git commit命令可以查看当前所在的分支,以及当前改动的文件,可以使用快捷键Alt 0打开/关闭;如下图所示, 可以看到分成了两个不同的区域, Changes 表示有改动的文件,包括修改、新增…

Python基础语法学习(工程向)-Stage1

输出的方式: print(fabscwdasd {num}) print(asbduwiu %d, a) print(asnidoian %d %d %d,a,b,c)不换行 print(asbdiuabw,end )输入 a input(输入) 只能输入字符串形式,如果相当做数字用则将其转化为数字 只有合法的数字才能转化成功 a int(input()…

厂里资讯之异步通知文章上下架

kafka及异步通知文章上下架 1)自媒体文章上下架 需求分析 2)kafka概述 消息中间件对比 特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从&#…

代码随想录算法训练营第41天|● 01背包问题 二维 ● 01背包问题 一维● 416. 分割等和子集

背包问题 二维01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 对于背包问题,有一种写法, 是使用二维数…

Android网络性能监控方案 android线上性能监测

1 Handler消息机制 这里我不会完整的从Handler源码来分析Android的消息体系,而是从Handler自身的特性引申出线上卡顿监控的策略方案。 1.1 方案确认 首先当我们启动一个App的时候,是由AMS通知zygote进程fork出主进程,其中主进程的入口就是Ac…

Mysqld数据库管理

一.Mysqld数据库类型 常用的数据类型 int 整型 无符号[0-4294967296(2的32次方)-1],有符号[-2147483648(2的31次方)-2147483647]float单精度浮点 4字节32位double双精度浮点 8字节64位char固定长度的字符类型…

Matlab基础篇:数据输入输出

前言 数据输入和输出是 Matlab 数据分析和处理的核心部分。良好的数据输入输出能够提高工作效率,并确保数据处理的准确性。本文将详细介绍 Matlab 数据输入输出的各种方法,包括导入和导出数据、数据处理和数据可视化。 一、导入数据 Matlab 提供了多种方…

计算机网络:1概述、2物理层

目录 概述因特网网络、互连网(互联网)与因特网的区别与关系因特网发展的三个阶段因特网服务提供者(Internet Service Provider,ISP)因特网的标准化工作因特网的管理结构 三种交换电路交换分组交换报文交换 计算机网络性…

Threejs-09、贴图的加载与环境遮蔽强度设置

1、创建文理加载器 let textureLoader new THREE.TextureLoader();2、加载贴图 // 加载文理 let texture textureLoader.load("./img/image.png") // 加载ao贴图 let aoMap textureLoader.load("./img/image.png");3、创建一个平面 let planeGeomet…

常见日志库NLog、log4net、Serilog和Microsoft.Extensions.Logging介绍和区别

在C#中,日志库的选择主要取决于项目的具体需求,包括性能、易用性、可扩展性等因素。以下是关于NLog、log4net、Serilog和Microsoft.Extensions.Logging的基本介绍和使用示例。 包含如何配置输出日志到当前目录下的log.txt文件及控制台的示例,…