【爬虫实战】用python爬取微博任意关键词搜索结果、exe文件

项目功能简介:

1.交互式配置;

2.两种任意关键词来源(直接输入、本地关键词文件);

3.自动翻页(无限爬取);

4.指定最大翻页页码;

5.数据保存到csv文件;

6.程序支持打包成exe文件;

7.项目操作说明文档;

一.最终效果


视频演示:

用python爬取微博关键词搜索结果、exe文件视频演示

二.项目代码

2.1 数据来源分析

使用chrome浏览器,F12打开调试面板,使用元素选择工具确定元素位置,如下图

确定页面元素:

说明:为何不直接调用接口获取数据呢? 通过调试面板会发现,搜索结果数据不是前后端分离方式返回到web端,而是通过服务端渲染之后一起发送到web端,所以只能对html解析,获取到关键字段内容。

2.2 解析数据

解析html需要使用bs4库,使用前请确保已经安装成功: pip install bs4,查看本地是否已经安装: pip list,如下图:


from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')

elements = soup.select('#pl_feedlist_index .card-wrap')


高能总结:1. soup.select选择器返回的对象还能继续选择元素,例如上面的elements,elements.select_one('.card .info #title');2. 元素如果使用了class对应选择器中用.,id用#,元素标签直接用标签名称,例如divspanul等等。

三.批量保存数据

数据保存使用pandas,因此需要先安装: pip install pandas,解析道的数据单行保存读写文件太费时间,使用pandas批量保存,用法如下:

import pandas as pd
list = [
  {
  "keywords":"",
  ...
  "like":"",
  },{
  "keywords":"",
  ...
  "like":"",
  }
]
df = pd.DataFrame(list)
df.to_csv('result.csv', index=False, columns=["keywords", "nickname", "publish_time", "device_info", "weibo_content", "forward", "comment", "like"])

高能总结:1. df.to_csv保存数据时,如果不存在result.csv文件会自动创建;2.往已经存在数据的result.csv文件中追加数据,使用追加方式:df.to_csv('result.csv', index=False, mode='a', header=False)

pandas保存检查完整代码:


import pandas as pd
import os


class DataTool:
    def __init__(self):
        self.file_path = 'result.csv'

    def check_data(self):
        if os.path.exists(self.file_path):
            with open(self.file_path, 'r') as file:
                first_line = file.readline()
                if first_line.strip():
                    return True
                else:
                    return False
        else:
            return False

    def data_to_save(self, list, page):
        df = pd.DataFrame(list)
        print("数据保存中...")
        if page == 1:
            has_file = self.check_data()
            if not has_file:
                df.to_csv(self.file_path, index=False, columns=["keywords", "nickname", "publish_time", "device_info", "weibo_content", "forward", "comment", "like"])
                return
        df.to_csv(self.file_path, index=False, mode='a', header=False)

下面是pandas库的优点总结:

Pandas 是一个强大的数据处理和分析库,它在数据科学和数据分析领域非常受欢迎。以下是一些 Pandas 库的主要优点:

1.数据结构:Pandas 提供了两个主要的数据结构,DataFrame 和 Series,它们使数据的处理和分析变得更加容易。DataFrame 是一个二维表格,类似于关系型数据库表,而 Series 是一个一维数组,类似于列表或数组。这两种数据结构使得处理不同类型的数据变得更加方便。

2.数据清洗:Pandas 提供了丰富的数据清洗工具,包括处理缺失值、重复值、异常值等的功能。你可以轻松地对数据进行清洗、填充缺失值、删除重复行等操作。

3.灵活的数据操作:Pandas 允许你进行各种灵活的数据操作,包括筛选、过滤、排序、合并、重塑和透视表等。这使得数据分析更加容易,你可以按照需要对数据进行各种操作,而不需要编写复杂的循环和逻辑。

4.数据分组和聚合:Pandas 提供了强大的分组和聚合功能,允许你根据一个或多个列对数据进行分组,并应用聚合函数(如求和、平均值、计数等)来汇总数据。这对于生成统计信息和汇总报告非常有用。

5.时间序列处理:Pandas 支持时间序列数据的处理和分析,包括日期和时间的解析、重采样、滚动窗口计算等。这对于金融分析、天气数据、股票市场分析等领域非常有用。

6.丰富的数据输入/输出:Pandas 支持多种数据格式的读写,包括 CSV、Excel、SQL 数据库、JSON、HTML、Parquet 等,使得数据的导入和导出非常方便。

7.集成性:Pandas 可以与其他数据科学库(如 NumPy、Matplotlib、Scikit-Learn)无缝集成,使得数据分析和建模工作更加流畅。

四.运行过程

五.项目说明文档

六.获取完整源码

爱学习的小伙伴,本次案例的完整源码,已上传微信公众号“一个努力奔跑的snail”,后台回复 微博关键词 即可获取。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java中的static

目录 static修饰成员变量 静态成员变量特征 static修饰成员方法 【静态方法特性】 static成员变量初始化 就地初始化 静态代码块初始化 注意事项 static修饰成员变量 静态成员变量特征 static修饰的成员变量,称为静态成员变量,静态成员变量最大的…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本,在高版本的openssl编译中已经没有:“ms\do_ms.bat”这个脚本了,现记录下编译过程 1、准备工作 安装ActivePerl,安装后会自动写入环境变量,参照参考文章测试安装成功与否&a…

排序——选择排序

基本思想 每一趟在待排序元素中选取关键字最小的元素加入有序子序列。 算法代码 #include <iostream> using namespace std;//选择排序 void SelectSort(int nums[],int n){int i,j,min;for(i0;i<n-1;i){ //一共需要进行 n-1 趟 mini; //记录最小元素的下…

算法:Java构建二叉树并递归实现二叉树的前序、中序、后序遍历

先自定义一下二叉树的类&#xff1a; // Definition for a binary tree node. public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left…

[Machine Learning][Part 8]神经网络的学习训练过程

目录 训练过程 一、建立模型&#xff1a; 二、建立损失函数 J(w,b): 三、寻找最小损失函数的(w,b)组合 为什么需要激活函数 激活函数种类 二分法逻辑回归模型 线性回归模型 回归模型 训练过程 一、建立模型&#xff1a; 根据需求建立模型&#xff0c;从前面神经网络的…

STM32:AHT20温湿度传感器驱动程序开发

注&#xff1a;温湿度传感器AHT20数据手册.pdf http://www.aosong.com/userfiles/files/AHT20%E4%BA%A7%E5%93%81%E8%A7%84%E6%A0%BC%E4%B9%A6(%E4%B8%AD%E6%96%87%E7%89%88)%20B1.pdf 一、分析AHT数据手册文档 (1).准备工作 1.新建工程。配置UART2 2.配置I2C1为I2C标准模式&…

数据抽取+dataworks的使用+ADB的应用

一&#xff0c;大数据处理之数据抽取 1&#xff0c;什么是数据抽取 在大数据领域中&#xff0c;数据抽取是指从原始数据源中提取所需的数据子集或特定数据项的过程&#xff0c; 数据抽取是数据预处理的重要步骤&#xff0c;它为后续的数据分析和建模提供了基础。 2&#xff…

ESP32S3入手体验测试

ESP32S3入手体验测试 &#x1f516;所入手的型号是YD-ESP32-S3 N16R8,该款和乐鑫官方推出的ESP32-S3-DevKitC-1配置差不多。 &#x1f388;乐鑫官方介绍&#xff1a;ESP32-S3-DevKitC-1 v1.1 &#x1f530;两者采用的模组&#xff1a;ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U模组…

Postgresql在linux环境下以源码方式安装

linux环境下源码方式的安装 1.下载安装包&#xff08;源码安装方式&#xff09; 安装包下载 https://www.postgresql.org/ftp/source/ 2.安装postgresql ① 创建安装目录 mkdir /opt/pgsql12② 解压下载的安装包 cd /opt/pgsql12 tar -zxvf postgresql-12.16.tar.gz ③编…

代理模式(静态代理、JDK代理、CGLIB代理)

简介 代理模式有三种不同的形式&#xff1a;静态代理、动态代理&#xff08;JDK代理、接口代理&#xff09;、CGLIB代理 目标&#xff1a;在不修改目标对象的前提下&#xff0c;对目标对象进行扩展。 静态代理 需要定义接口或父类对象&#xff0c;被代理对象和代理对象通过实…

【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…

【触想智能】工业显示器上市前的检测项目分享

工业显示器在上市前&#xff0c;需要做一项重要的工作&#xff0c;那就是工业显示器出厂前的产品可靠性检测。 工业显示器选择的测试项目相比商用端更为严格&#xff0c;常见的性能测试项目包括高温老化、防尘防水、电磁静电干扰、防摔防撞等&#xff0c;在工业级应用领域&…

吴恩达《机器学习》4-6->4-7:正规方程

一、正规方程基本思想 正规方程是一种通过数学推导来求解线性回归参数的方法&#xff0c;它通过最小化代价函数来找到最优参数。 代价函数 J(θ) 用于度量模型预测值与实际值之间的误差&#xff0c;通常采用均方误差。 二、步骤 准备数据集&#xff0c;包括特征矩阵 X 和目标…

unity中移动方案--物理渲染分层

一、三种基本移动方案 unity中的移动分为Transform和Rigidbody以及CharacterController&#xff0c;其中CharacterController功能完善&#xff0c;已经可以避免了穿墙&#xff0c;并实现了贴墙走等情况&#xff0c;需要结合性能考虑选择不同的方式。 1.使用transform,直接修改…

Winform 实现俄罗斯方块游戏(一)

第一步&#xff0c;先用GDI绘制小正方形方块&#xff0c;其它形状的用这个方块合成 如何绘制一个方块&#xff1f;先绘制两个正方形&#xff0c;如下&#xff1a; 然后四周用梯形填充&#xff0c;内部颜色用渐变&#xff0c;这样更有立体感&#xff0c;下篇介绍如何实现。

[iOS开发]iOS中TabBar中间按钮凸起的实现

在日常使用app的过程中&#xff0c;经常能看到人家实现了底部分栏控制器的中间按钮凸起的效果&#xff0c;那么这是怎么实现的呢&#xff1f; 效果演示&#xff1a; 实现原理&#xff1a; 创建按钮 创建一个UITabBar的子类&#xff0c;重写它的layoutSubviews方法&#xff1…

安全与HTTP协议:为何明文传输数据成为争议焦点?

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、H…

线性代数 第五章 特征值与特征向量

一、特征值定义 二、特征值求法 定义法&#xff1b;&#xff1b;相似。 三、特征向量求法 定义法&#xff1b;基础解系法&#xff1b;&#xff1b;相似。 四、特征值性质 不同特征值的特征向量线性无关k重特征值至多有k个线性无关的特征向量 五、相似的定义 若&#xff…

0003Java安卓程序设计-springboot基于Android的学习生活交流APP

文章目录 **摘** **要**目 录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合&#xff0c;利用java技术建设学习生活交流APP&…

【深蓝学院】手写VIO第8章--相机与IMU时间戳同步--作业

0. 题目 1. T1 逆深度参数化时的特征匀速模型的重投影误差 参考常鑫助教的答案&#xff1a;思路是将i时刻的观测投到world系&#xff0c;再用j时刻pose和外参投到j时刻camera坐标系下&#xff0c;归一化得到预测的二维坐标&#xff08;这里忽略了camera的内参&#xff0c;逆深…