python爬虫 - 爬取微博热搜数据

文章目录

  • python爬虫 - 爬取微博热搜数据
    • 1. 第一步:安装requests库和BeautifulSoup库
    • 2. 第二步:获取爬虫所需的header和cookie
    • 3. 第三步:获取网页
    • 4. 第四步:解析网页
    • 5. 第五步:分析得到的信息,简化地址
    • 6. 第六步:爬取内容,清洗数据
    • 7. 爬取微博热搜的代码实例以及结果展示

python爬虫 - 爬取微博热搜数据

python爬虫六部曲:

  • 第一步:安装requests库和BeautifulSoup库

  • 第二步:获取爬虫所需的header和cookie

  • 第三步:获取网页

  • 第四步:解析网页

  • 第五步:分析得到的信息,简化地址:

  • 第六步:爬取内容,清洗数据

1. 第一步:安装requests库和BeautifulSoup库

在程序中引用两个库的书写是这样的:

import requests
from bs4 import BeautifulSoup

以pycharm为例,在pycharm上安装这两个库的方法。在菜单【文件】–>【设置】->【项目】–>【Python解释器】中,在所选框中,点击软件包上的+号就可以进行查询插件安装了。有过编译器插件安装的hxd估计会比较好入手。具体情况就如下图所示。

2. 第二步:获取爬虫所需的header和cookie

以爬取微博热搜的爬虫程序为例。获取header和cookie是一个爬虫程序必须的,它直接决定了爬虫程序能不能准确的找到网页位置进行爬取。

  • 首先进入微博热搜的页面,按下F12,就会出现网页的js语言设计部分,找到网页上的Network部分。如下图所示:

在这里插入图片描述

  • 然后按下ctrl+R刷新页面,此时法线右边 NetWork 部分出现很多信息。

(如果进入后就有所需要的信息,就不用刷新了),当然刷新了也没啥问题。

在这里插入图片描述

  • 过滤网络信息,并拷贝其 cURL 信息 ,
    在 Network --> Filter 中,依据网址(https://s.weibo.com/top/summary)中的关键信息进行过滤,如: summary。 然后,我们浏览Name这部分,找到我们想要爬取的文件(网络信息),鼠标右键,选择copy,复制下网页的URL。

    过滤后,有效信息会少很多,如下所示。选中所需的条目,右键 --> Copy --> Copy as cURL

在这里插入图片描述

  • 利用工具 Convert curl commands to code https://curlconverter.com/python/ 进行转换

在这里插入图片描述

转换后信息如下图所示,选择【Copy to clipboard】,并黏贴到Pycharm开发环境中即可直接使用:

在这里插入图片描述

拷贝到 pycharm 中,可直接作为源代码使用:

在这里插入图片描述

3. 第三步:获取网页

通过requests.get() 即可获取网页内容:

response = requests.get('https://s.weibo.com/top/summary', cookies=cookies, headers=headers)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
print(f'soup value= {soup}')

4. 第四步:解析网页

这个时候,我们需要回到网页: 【按下F12】–> 【找到网页的Elements部分 --> 【选中左上角的小框带箭头的标志】,进入【内容选择模式】,如下图,当点击(或鼠标移动到)对应网页内容时,这个时候网页就会自动在右边显示出你获取网页部分对应的代码。

在这里插入图片描述
在这里插入图片描述

在找到想要爬取的页面部分的网页内容后,在响应条目(如:“赵丽颖拍林更新”)上右键,退出【内容选择模式】。

然后将鼠标放置于 【Element】中对应的代码上,右键 -> copy --> selector。就如图所示。

在这里插入图片描述

在这里插入图片描述

5. 第五步:分析得到的信息,简化地址

黏贴到文本文件中信息如下:

#pl_top_realtimehot > table > tbody > tr:nth-child(6) > td.td-02

同理再黏贴:

#pl_top_realtimehot > table > tbody > tr:nth-child(8) > td.td-02 > a

其实刚才复制的selector就相当于网页上对应部分存放的地址。由于我们需要的是网页上的一类信息,所以我们需要对获取的地址进行分析,提取。

当然,就用那个地址也是可行的,就是只能获取到你选择的网页上的那部分内容。

可以发现几个地址有很多相同的地方,唯一不同的地方就是tr部分。由于tr是网页标签,后面的部分就是其补充的部分,也就是子类选择器。可以推断出,该类信息,就是存储在tr的子类中,我们直接对tr进行信息提取,就可以获取到该部分对应的所有信息。所以提炼后的地址为:

#pl_top_realtimehot > table > tbody > tr > td.td-02 > a

这个过程对js类语言有一定了解的hxd估计会更好处理。不过没有js类语言基础也没关系,主要步骤就是,保留相同的部分就行,慢慢的试,总会对的。

6. 第六步:爬取内容,清洗数据

这一步完成后,我们就可以直接爬取数据了。用一个标签存储上面提炼出的像地址一样的东西。标签就会拉取到我们想获得的网页内容。

# 爬取内容
content = "#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"

之后我们就要soup和text过滤掉不必要的信息,比如js类语言,排除这类语言对于信息受众阅读的干扰。这样我们就成功的将信息,爬取下来了。

# 清洗数据
a = soup.select(content)

将数据存储到文件夹中,所以会有wirte带来的写的操作。想把数据保存在哪里,或者想怎么用,就看读者自己了。

# 数据存储
fo = open("./weibo_down.txt", 'a', encoding="utf-8")
for i in range(0,  len(a)):a[i] = a[i].textfo.write(a[i] + '\n')fo.close()

7. 爬取微博热搜的代码实例以及结果展示


import osimport requests
from bs4 import BeautifulSoupcookies = {'SUB': '_2AkMRSvbGf8NxqwFRmfsXyGPha4V-zwnEieKnFgcdJRMxHRl-yT9kqm0YtRB6OsrYKaj9W1OqyxFMGOF29qujP5sAwPq3','SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9WWLhNh6syZaoHGnqmVxPNW0','_s_tentry': 'passport.weibo.com','Apache': '5636807549833.777.1712749042101','SINAGLOBAL': '5636807549833.777.1712749042101','ULV': '1712749042117:1:1:1:5636807549833.777.1712749042101:',
}headers = {'authority': 's.weibo.com','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'max-age=0',# 'cookie': 'SUB=_2AkMRSvbGf8NxqwFRmfsXyGPha4V-zwnEieKnFgcdJRMxHRl-yT9kqm0YtRB6OsrYKaj9W1OqyxFMGOF29qujP5sAwPq3; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WWLhNh6syZaoHGnqmVxPNW0; _s_tentry=passport.weibo.com; Apache=5636807549833.777.1712749042101; SINAGLOBAL=5636807549833.777.1712749042101; ULV=1712749042117:1:1:1:5636807549833.777.1712749042101:','referer': 'https://passport.weibo.com/','sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Linux"','sec-fetch-dest': 'document','sec-fetch-mode': 'navigate','sec-fetch-site': 'same-site','sec-fetch-user': '?1','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
}response = requests.get('https://s.weibo.com/top/summary', cookies=cookies, headers=headers)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
print(f'soup value= {soup}')# 爬取内容
content = "#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"# 清洗数据
a = soup.select(content)# 数据存储
fo = open("./weibo_down.txt", 'a', encoding="utf-8")
for i in range(0,  len(a)):a[i] = a[i].textfo.write(a[i] + '\n')fo.close()

在这里插入图片描述

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

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

相关文章

大象机器人发布智能遥操作机械臂组合myArm MC,加速具身智能研究与发展!

在全球工业自动化和智能化加速发展的今天,机器人行业正经历着翻天覆地的变化。具身智能研究,作为人工智能领域的关键分支,正努力在精准动作控制、高层次自主决策能力以及自然人机交互体验上赋予机器人新的能力。 在此背景下,大象机…

Jackson 2.x 系列【14】特征配置篇之 MapperFeature

有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 源码地址:https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. 通用2.1 USE_ANNOTATIONS2.2 USE_GETTERS_AS_SETTERS2.3 PROPAGATE_TR…

吴恩达机器学习理论基础解读—线性模型(单一特征拟合)

吴恩达机器学习理论基础——线性模型 机器学习最常见的形式监督学习,无监督学习 线性回归模型概述 应用场景一:根据房屋大小预测房价 应用场景二:分类算法(猫狗分类) 核心概念:将训练模型的数据称为数…

宝塔面板部署腾讯云的域名

一、腾讯云,搜索我的证书,点击打开如图所示,点击下砸 二、点击宝塔的证书,然后下载到桌面 三、解压 四、打开宝塔,网站》自己的项目列表中要绑定的ssl 五、对应的文件内容复制进去,保存并启用证书 六、有了…

springboot相关报错解决

Caused by: java.lang.ClassNotFoundException: 目录 Caused by: java.lang.ClassNotFoundException: org.springframework.context.event.GenericApplicationListener spring-boot-dependencies:jar:2.1.9.RELEASE was not found org.springframework.context.event.Generi…

C++/QT 医院信息管理系统

一、项目介绍 (1)管理员、居民、医生三个角色登录;居民可注册账号登录,医生由管理员添加,管理员权限最高 (2)管理员: 模块一:信息管理(医生信息管理、医院…

Python计算多个表格中多列数据的平均值与标准差并导出为新的Excel文件

本文介绍基于Python语言,对一个或多个表格文件中多列数据分别计算平均值与标准差,随后将多列数据对应的这2个数据结果导出为新的表格文件的方法。 首先,来看一下本文的需求。现有2个.csv格式的表格文件,其每1列表示1个变量&#x…

CCD相机均匀光源积分球

均匀光源积分球在摄影和成像领域具有重要的作用,它可以为CCD相机提供高质量、均匀光源的关键设备。CCD相机,即电荷耦合器件相机,以其高灵敏度、高分辨率和快速响应等特点广泛应用于科研、工业检测、医疗影像等多个领域。然而,为了…

Git Clone succeeded, but checkout failed

Clone succeeded, but checkout failed: Filename too long 原因: 由于系统限制,路径太长,无法检出 解决方案: # git允许长路径,在已clone的仓库执行 git config core.longpaths true # 再次检出 git ch…

Sarson Funds 在 Casper 测试网推出稳定币 csprUSD

Sarson Funds 与 Casper Association 合作,在 Casper Network (CSPR)测试网上推出了 csprUSD 稳定币。 作为最新的法币背书型稳定币,csprUSD 进入了数字货币市场,与 Ripple 和 Cardano 等组织近期推出的产品定位一致。…

libcurl 简单实用

LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP、FTP、SMTP、POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发送HTTP请求、下载文件、发送电子邮件等…

【2024MathorCup妈妈杯建模】赛题 B:甲骨文智能识别中原始拓片单字自动分割与识别研究

【2024MathorCup妈妈杯建模】赛题 B:甲骨文智能识别中原始拓片单字自动分割与识别研究 加群可以享受定制等更多服务,或者搜索B站:数模洛凌寺 联络组织企鹅:904117571 问题重述 问题 1:对于附件 1(Pre_…

npm创建Vue3项目

npm创建Vue3项目 1 创建Vue项目说明 2 安装3 运行 1 创建Vue项目 创建最新版的Vue项目,已经不推荐使用CLI构建方式了。参考如下即可。 npm create vuelatest如果发现一直动不了,切换网络试一下,个人热点尝试一下。 按下图的选项按需引入自…

提升编程效率的秘密武器:IntelliJ IDEA

IntelliJ IDEA的基本介绍 正如一个故事的开头,我们从一个名字开始 - IntelliJ IDEA。这是一个在程序员中广受欢迎的集成开发环境(IDE),由捷克公司JetBrains开发。它的名字听起来有些复杂,但实际上,它的功能…

AMD Tensile 简介与示例

按照知其然,再知其所以然的认知次序进行 1,下载代码 git clone --recursive https://github.com/ROCm/Tensile.git 2,安装 Tensile cd Tensile mkdir build cd build ../Tensile/bin/Tensile ../Tensile/Configs/rocblas_dgemm_nn_asm_full…

算法 分割字符串为实体类

题目 String userData "10000:张三:男:1998-01-01#10001:张三:男:1998-01-01#10002:李四:女:1999-02-02#10003:王五:男:2000-03-03#10004:赵六:女:2001-04-04"; String[] usersArray userData.split("#"); // 使用Stream API将字符串数组转换为SysUser对…

【计算机毕业设计】音乐论坛App管理系统——后附源码

🎉**欢迎来到琛哥的技术世界!**🎉 📘 博主小档案: 琛哥,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 琛哥在深度学习任务中展现出卓越的能力&a…

C++ | Leetcode C++题解之第21题合并两个有序链表

题解&#xff1a; 题解&#xff1a; class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* preHead new ListNode(-1);ListNode* prev preHead;while (l1 ! nullptr && l2 ! nullptr) {if (l1->val < l2->val) {prev-…

【vue】v-if 条件渲染

v-if 不适用于频繁切换显示模式的场景 修改web.user&#xff0c;可看到条件渲染的效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

.NET MAUI使用Visual Studio Android Emulator(安卓模拟器)运行

Android Emulator&#xff08;安卓模拟器&#xff09;运行&#xff1a; 安卓模拟器一直卡在不动&#xff1a; 在某些情况下&#xff0c;在“打开或关闭 Windows 功能”对话框中启用 Hyper-V 和 Windows 虚拟机监控程序平台后可能无法正确启用Hyper-V。 我就是开启Hyper-V才把安…