当前位置: 首页 > news >正文

东方财富股吧发帖与评论爬虫

东方财富股吧发帖与评论爬虫
  • 东方财富股吧爬虫
    • 写在开头
    • 项目介绍
    • 主要功能
    • 文件介绍
    • 爬取逻辑
      • a. 爬取帖子信息
      • b. 爬取评论信息
    • 使用步骤
      • 1. 下载代码
      • 2. MongoDB 安装
      • 3. Webdriver 安装
      • 4. 运行 main.py
      • 5. 查看数据
    • 踩过的坑
    • 附录(运行结果)

东方财富股吧爬虫

写在开头

强烈建议大家直接访问 项目仓库:https://github.com/zcyeee/EastMoney_Crawler,以便获取最新版本的代码和使用教程,CSDN不再同步更新,CSDN不再同步更新啦~

(是的,这篇文章后面就不用看了,直接访问项目仓库查看README就好,更加全面详细)

注意:如果在CSDN点击链接时弹出 “GitHub加速” ,千万不要点!要点“直接访问”!
因为CSDN自动克隆的仓库很陈旧(旧代码在某些情况可能会报错),根本不是同步克隆,被CSDN气晕??。

秉持重要事情说三遍原则:点击“直接访问”!点击“直接访问”!点击“直接访问”!

如果评论或私信作者没有及时回复,应该是作者没有看到,看到都会回~ 还是大家建议去GitHub上提 issue,这个作者关注的更多~(大家给repo点个star就是对作者最大的支持??)


项目介绍

该项目使用 selenium 模拟用户操作抓取股吧 发帖评论 数据(允许多线程同时抓取多支股票的相关信息),并将抓取到的数据储存到 MongoDB 中,方便后续使用。

附加说明:非科班新手第一次写爬虫,代码效率一般(比如未使用 redis 做消息队列等等),适合新手入门或小规模爬取。以后若有能力与时间会对代码进行迭代维护,提高爬取效率,同时欢迎各位大佬提 issue。

主要功能

  1. 爬取指定股票股吧中的发帖信息,包括帖子标题,浏览量,评论数,帖子链接,发帖时间 (YYYY-MM-DD, HH: MM),以 post_XXXXXX 为集合名储存到 MongoDB 中。
  2. 爬取指定时间范围中股吧帖子下的评论信息,包括评论内容,是一级或二级评论,点赞数,发帖时间 (YYYY-MM-DD, HH: MM),以 comment_XXXXXX 为集合名储存到 MongoDB 中。
  3. 可以通过 post_XXXXXX 下的 _idcomment_XXXXXX 下的 post_id 建立映射关系,对帖子标题和评论内容进行匹配。

文件介绍

  • main.py : 主程序,直接在里面调用函数即可开始抓取数据。
  • crawler.py : 爬虫主体,包含了 PostCrawlerCommentCrawler 两个类,负责抓取帖子和评论的信息。
  • parser.py : 解析器,包含了 PostParserCommentParser 两个类,负责解析帖子和评论的网页源码。
  • mongodb.py : 数据库接口,包含了 MongoAPI 类,负责建立与本地数据库的连接并实现基础操作。
  • stealth.min.js : 一个 javascript 文件,用来抹掉 selenium 中的自动化特征。

爬取逻辑

a. 爬取帖子信息
  1. 设定需要爬取的股吧帖子和页数范围后,爬虫将会爬取从 start_page 到第 end_page 页的所有帖子信息,包括标题、评论个数、浏览量、发帖时间和帖子对应的跳转链接(非股吧帖子的链接将会被剔除),以 post_XXXXXX 为名保存到本地名为 post_info 的数据库中(后续爬取对应股票的评论信息需要用到这一步的数据)。
  2. 注意保存的时间为发帖时间,而非更新时间。而如何确立发帖时间年份的函数集成在了 PostParser 类(不是通过访问帖子跳转链接获取),其中还有一些特殊情况的处理,不在此赘述。
  3. 当爬取帖子到 660 页左右时,一般会被限制访问,此时程序会自动退出 webdriver 并重新实例一个继续爬取。(ps: 暂时只知道这个解决方法,试过清理 cookies 和更改 user-agent,并不管用orz)
b. 爬取评论信息
  1. 爬取评论信息一定要等帖子信息爬取完之后才可以进行,因为要用到帖子对应的跳转链接,和该帖子是否有评论的信息(没有评论的帖子会从爬取列表中剔除,节省时间)。
  2. 输入 start_dateend_date 后,会自动从集合 post_XXXXXX 中筛选出该时间范围内且评论数不为零的帖子链接,爬取这些帖子下的一级评论、二级评论( sub_comment 为 1 代表是二级评论,0 代表一级评论)、点赞数和评论时间,以 comment_XXXXXX 为名保存到本地名为 comment_info 的数据库中。
  3. 对于无法显示的违规评论,会自动略过该帖。有时帖子评论未能成功加载,则会在 0.2s 后刷新网页,若依旧加载失败,也会略过该帖子。
  4. 在爬取的时候会显示爬取页数和完成进度。若爬虫中途中断,会显示需要爬取的 _id 范围和出错的 id 值,可通过 find_by_id 方法从上次终止的地方接着抓取评论数据。

使用步骤

1. 下载代码

前往仓库地址 git cloneDownload ZIP下载 。

2. MongoDB 安装

若没有 MongoDB,需要先下载,mac 推荐直接使用 homebrew 进行安装(官网教程)。

安装后记得在终端中启动 MongoDB,命令如下:

brew services start mongodb-community@5.0

如果 MongoDB 运行在本地计算机上,而且也没有修改端口或者添加用户名及密码,那么不需要进行任何操作;若有更改,则需在 mongodb.py 中修改对应参数。

最后在 MongoDB 中创建两个名为 post_infocomment_info 的数据库,分别用来储存 发帖信息评论信息

3. Webdriver 安装

在电脑上下载 Chromedriver ,版本需要与 Chrome 一致,安装教程见 Chromedriver (mac),Chromedriver (win)。

4. 运行 main.py

进入主程序 main.py ,安装没有安装的包,对参数进行修改( main.py 中有相关参数的解释)即可开始爬取(注意在爬取评论信息前需要先爬取发帖信息)。

a. 爬取发帖信息参数设置示例:

thread1 = threading.Thread(target=post_thread, args=('000333', 1, 500))  # 设置想要爬取的股票代码和页数范围
thread2 = threading.Thread(target=post_thread, args=('000729', 1, 500))  # 可同时进行多个线程

第一个参数为 stock_symbol ,第二个参数为 start_page,第三个参数为 end_pagethread1 表示爬取 000333 股吧从第 1 页到第 500 页的帖子信息。

b. 爬取评论信息参数设置示例:

thread1 = threading.Thread(target=comment_thread_date, args=('000333', '2020-01-01', '2023-12-31'))
thread2 = threading.Thread(target=comment_thread_date, args=('000729', '2020-01-01', '2023-12-31'))

第一个参数为 stock_symbol ,第二个参数为 start_date ,第三个参数为 end_datethread1 表示爬取 2020-01-012023-12-31 范围中 000333 股吧帖子下的评论信息。

5. 查看数据

爬取成功后,帖子相关信息以 post_XXXXXX 为集合名储存在 post_info 数据库中,评论相关信息以 comment_XXXXXX 为集合名储存在 comment_info 数据库中。

踩过的坑

  1. 在设置 webdriver 时,不要设置 options.add_argument(‘blink-settings=imagesEnabled=false’) 来取消加载网页的图片。这样确实会极大地提升爬取速度,但也许爬虫特征太明显了,东方财富会把你的 IP 拉黑,所有访问的网页都会跳转到方正证券吧。不过 IP 拉黑貌似不是永久的,过了一个小时左右就把我放出来了(误 orz
  2. 有一些帖子不是股吧官方的(少数),底下的评论格式会不一样,因此本项目剔除了这部分帖子(占比较少不会造成太大影响)。
  3. 发帖界面上只有月份和日期,没有年份这一信息,所以需要自己来处理判断年份。需要注意的是 问董秘 这一栏目显示的是最后更新的时间,而帖子的排序是按照发帖时间来的(应该是一个 BUG),需要特殊处理一下。
  4. 部分热度较高的帖子的评论区会分为 热门评论全部评论,在定位网页元素的时候需要注意一下,避免爬取到重复评论。

附录(运行结果)

  1. 股吧发帖界面

  1. 股吧评论界面

  1. 爬取进度与报错提醒

  1. 爬取结果(发帖信息评论信息



最后,如果大家愿意给我的 GitHub Repo 点一个免费的star,就是对作者最大的鼓励!!

相关文章:

东方财富股吧发帖与评论爬虫

东方财富股吧发帖与评论爬虫 东方财富股吧爬虫 写在开头项目介绍主要功能文件介绍爬取逻辑 a. 爬取帖子信息b. 爬取评论信息 使用步骤 1. 下载代码2. MongoDB 安装3. Webdriver 安装4. 运行 main.py5. 查看数据 踩过的坑附录(运行结果) 东方财富股吧爬…...

【Elasticsearch】match_bool_prefix查询

match_bool_prefix查询是 Elasticsearch 中一种用于全文搜索的查询方式,适用于需要同时匹配多个词汇,但词汇顺序不固定的情况,它结合了布尔查询(bool)和前缀查询(prefix)的功能,适用…...

微信小程序image组件mode属性详解

今天学习微信小程序开发的image组件,mode属性的属性值不少,一开始有点整不明白。后来从网上下载了一张图片,把每个属性都试验了一番,总算明白了。现总结归纳如下: 1.使用scaleToFill。这是mode的默认值,sc…...

数据结构:最小生成树

1.基本概念 生成树:连通无向图的生成树是包含图中所有顶点的极小连通子图(无环)。 最小生成树:所有生成树中边权重总和最小的那棵。 2.常用算法 克鲁斯卡尔算法(Kruskal) 步骤: 将所有边按权…...

C语言-章节 4:函数的定义与声明 ——「神秘法术的卷轴」

少年和 Inta 成功通过运算符与表达式的考验后,继续在函数城堡中探索。他们沿着一条闪烁着幽光的走廊前行,走廊两侧的墙壁上刻满了奇异的符号,仿佛在诉说着古老的编程秘密。终于,他们来到了一间神秘的房间,房间中央悬浮…...

《云原生安全攻防》-- K8s镜像安全:镜像全生命周期安全管理

从攻击者的角度来看,针对容器镜像的软件供应链攻击和镜像投毒等攻击方式,不仅攻击成本低,而且还能带来更高且持久的收益。因此,镜像安全问题变得日益突出。 在本节课程中,我们将深入探讨镜像全生命周期的安全管理&…...

uniapp商城之首页模块

文章目录 前言一、自定义导航栏1.静态结构2.修改页面配置3.组件安全区适配二、通用轮播组件1. 静态结构组件2.自动导入全局组件3.首页轮播图数据获取三、首页分类1.静态结构2.首页获取分类数据并渲染四、热门推荐1.静态结构2.首页获取推荐数据并渲染3.首页跳转详细推荐页五、猜…...

【Javascript Day13、14、15、16】

html的DOM操作 // JS 是为了让页面实现动态网页效果 // 动态和静态区分取决于JS的和页面标签的数据交互 // 动态网页:有数据交互 // 静态网页:无数据交互 // JS 和 元素的关联操作对象 DOM // 整个HT…...

linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上

linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上 这里的问题是 /usr/share/udhcpc/default.script脚本有问题 用下面正确脚本,即可写进去 #!/bin/sh# udhcpc script for busybox # Copyr…...

openGauss 3.0 数据库在线实训课程13: 学习逻辑结构:表管理1

前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 学习openGauss表的创建、搜索路径和访问方法等 课程作业 1.创建一个表(默认,不指定模式),查…...

网络编程-

文章目录 网络编程套接字UDP/TCP的api使用 网络编程套接字 socket,是操作系统给应用程序(传输层给应用层)提供的api,Java也对这个api进行了封装。 socket提供了两组不同的api,UDP有一套,TCP有一套&#x…...

基于单片机的常规肺活量SVC简单计算

常规肺活量 SVC(Slow Vital Capacity)是指尽力吸气后缓慢而又完全呼出的最大气量。 成年男性的肺活量通常在 3500-4000ml 之间,成年女性的肺活量通常在 2500-3000ml 之间。 单片机一般通过外接流量传感器,使用ADC高速采集的方式…...

【PostgreSQL】PG在windows下的安装

一、准备 通过官网下载安装文件,官方下载路径如下: https://www.postgresql.org/download/windows/ 二、安装 双击postgresql-17.3-1-windows-x64.exe文件,启动安装,进入安装步骤,点击Next 选择PG安装路径&#xff…...

电动汽车电池监测平台系统设计(论文+源码+图纸)

1总体设计 本次基于单片机的电池监测平台系统设计,其整个系统架构如图2.1所示,其采用STC89C52单片机作为控制器,结合ACS712电流传感器、TLC1543模数转换器、LCD液晶、DS18B20温度传感器构成整个系统,在功能上可以实现电压、电流、…...

基于和声搜索(Harmony Search, HS)的多中心点选址优化算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于和声搜索(Harmony Search, HS)的多中心点选址优化算法matlab仿真。可以设置多个不同的中心点。 2.测试软件版本以及运行结果展示 matlab2022a/matlab2024b版…...

单链表的概念,结构和优缺点

1. 概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 2. 单链表的结构 单链表是由一系列节点组成的线性结构,每个结点包含两个域。:数据域和指针域。 数据域用来…...

SpringBoot+数据可视化的奶茶点单购物平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 本奶茶点单购物平台搭建在 Spring Boot 框架之上,充分利用其强大的依赖管理机…...

深入理解 Vue3 中 ref 与 reactive 的区别及应用

深入理解 Vue3 中 ref 与 reactive 的区别及应用 在 Vue3 的开发世界里,响应式编程是其核心特性之一,而ref与reactive作为实现响应式的关键 API,理解它们的区别和适用场景对于开发者来说至关重要。本文将带你深入剖析这两个 API,…...

TDengine 客户端连接工具 taos-Cli

简介工具获取运行命令行参数 基础参数高级参数 数据导出/导入 数据导出数据导入 执行 SQL 脚本使用小技巧 TAB 键自动补全设置字符列显示宽度其它 错误代码表 简介 TDengine 命令行工具(以下简称 TDengine CLI)是用户操作 TDengine 实例并与之交互最简…...

Linux(ubuntu)下载ollama速度慢解决办法

国内安装Ollama都很慢,因为一直卡在下载中,直接通过官网的链接地址下载方法: curl -fsSL https://ollama.com/install.sh | sh速度大概是10min下载1%,完全不能接受啊! 其中很好的一个加速方式是通过使用github文件加速…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四&#xff…...