【经典爬虫案例】用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分享):

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解锁网络数据的宝藏:Python爬虫工具与教程集合 一、探索网络信息的无限宝藏 在互联网的海洋中,蕴藏着海量的有价值信息。如何合法、高效地获这些信息?Python爬虫工具与教程为您揭开这一神秘面纱。通过这些资源,您可以轻松地网站信息,提所需内容,为各种应用场景提供强大的数据支持。 二、资源亮点 工具齐全:提供一系列功能强大的Python爬虫工具,满足您不同场景下的需求。 教程详尽:配套的Python爬虫教程,从基础到进阶,让您逐步掌握爬虫的核心技术。 合法合规:严格遵守法律法规和网站使用协议,确保采集行为合法,尊重网站权益。 实战项目:结合实际案例,让您在实践中掌握Python爬虫的运用,真正做到学以致用。 三、适用人群 无论您是数据分析师、网络开发者还是对Python爬虫感兴趣的爱好者,这些资源都将为您的学习和实践提供有力的支持。 四、使用建议 按需选择工具与教程:根据实际需求选择合适的工具和教程,确保学习与实践的有效性。 遵守法律法规与协议:在使用这些资源进行活动时,务必遵守相关法律法规和网站的使用协议。 持续学习与更新:随着网络技术的不断进步,Python爬虫技术也在不断发展。建议您持续关注相关动态,提升自己的技能水平。 五、安全与责任 尊重网站权益:避免对目标网站的正常运行造成干扰或损害,合理使用资源。 隐私保护:在采集数据时,严格遵守隐私保护法规,不泄露或滥用用户个人信息。 风险防范:了解并应对潜在的网络威胁,采相应措施降低风险。 感谢您选择我们的Python爬虫工具与教程集合!让我们一起挖掘网络信息的宝藏,为您的工作和研究注入新的活力!请务必遵守法律法规和网站使用协议,共同维护网络数据的合法采集与利用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值