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

东方财富股吧发帖与评论爬虫
  • 东方财富股吧爬虫
    • 写在开头
    • 项目介绍
    • 主要功能
    • 文件介绍
    • 爬取逻辑
      • 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/965771.html

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

相关文章

wxWidgets生成HTML文件,带图片转base64数据

编译环境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 这里功能就是生成HTML文件,没用HTML库,因为是自己固定的格式,图片是一个vector,可以动态改变数量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…

网络编程 day2

题目 代码 服务器 typedef char DataType[32]; //普通节点数据类型typedef struct NODE {union{DataType data; //普通节点数据域int len; //头节点数据域};struct NODE *next; //指针域 }node,*nodePtr;struct PACK {int size; //告知 通信传输的数据的大小int type; //决定…

【鸿蒙HarmonyOS Next实战开发】实现ArkTS/JS和C/C++的交互-Node-API

一、HarmonyOS Node-API简介 在HarmonyOS应用开发中&#xff0c;通常以ArkTS/JS语言为主&#xff0c;但在一些特殊场景下&#xff0c;例如游戏开发、物理模拟等&#xff0c;由于对性能、效率等有较高要求&#xff0c;需要借助现有的C/C库来实现。为了满足这种需求&#xff0c;…

Postgresql的三种备份方式_postgresql备份

这种方式可以在数据库正在使用的时候进行完整一致的备份&#xff0c;并不阻塞其它用户对数据库的访问。它会产生一个脚本文件&#xff0c;里面包含备份开始时&#xff0c;已创建的各种数据库对象的SQL语句和每个表中的数据。可以使用数据库提供的工具pg_dumpall和pg_dump来进行…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

基础篇05-直方图操作

本节将简要介绍Halcon中有关图像直方图操作的算子&#xff0c;重点介绍直方图获取和显示两类算子&#xff0c;以及直方图均衡化处理算子。 目录 1. 引言 2. 获取并显示直方图 2.1 获取&#xff08;灰度&#xff09;直方图 (1) gray_histogram (2) gray_histo_abs (3) gr…

3.攻防世界 weak_auth

题目描述提示 是一个登录界面&#xff0c;需要密码登录 进入题目页面如下 弱口令密码爆破 用1 or 1 #试试 提示用admin登录 则尝试 用户名admin密码&#xff1a;123456 直接得到flag 常用弱口令密码&#xff08;可复制&#xff09; 用户名 admin admin-- admin or -- admin…

金蛇祈福,鸿运开年!广州白云皮具城2025开市大吉!

锣鼓一响&#xff0c;黄金万两&#xff01;2月6日大年初九&#xff0c;广州白云皮具城举行盛大的醒狮开市仪式&#xff01;象征吉祥如意的醒狮&#xff0c;将好运、财运传递给全体商户和八方来客。 醒狮点睛 金鼓一响黄金万两&#xff0c;十头醒狮登台&#xff0c;董事总经理刘…

【Axure教程】标签版分级多选下拉列表

分级多选下拉列表是指一个下拉列表&#xff0c;它包含多个层次的选项&#xff0c;用户可以选择一个或多个选项。这些选项通常是根据某种层级关系来组织的&#xff0c;例如从上到下有不同的分类或者过滤条件&#xff0c;用户选择上层选项后&#xff0c;下层选项会发生变化&#…

SpringBoot中的多环境配置管理

SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置&#xff1f;2. Spring Boot 中如何实现多环境配置&#xff1f;3. 多环境配置的应用场景4. 如何实现配置隔离&#xff1f; Spring B…

SOME/IP报文格式及发现协议详解

在之前的文章中&#xff0c;我们介绍了SOME/IP协议的几种服务接口。在本篇博客中&#xff0c;主要介绍some/ip协议传输的header报文格式以及SOME/IP-SD发现协议。 目录 流程 报文格式 Message ID Length Request ID protocal version/Interface Version Message Type…

使用Ollama本地部署deepseek

1、下载安装Ollama 前往下载页面 https://ollama.com/download下载好安装包&#xff0c;如同安装软件一样&#xff0c;直接安装即可 win中默认为C盘&#xff0c;如果需要修改到其他盘&#xff0c;查找具体教程 运行list命令&#xff0c;检查是否安装成功 2、修改模型下载的…

约束布局属性学习

1、layout_constraintHorizontal_bias layout_constraintHorizontal_bias 是 ConstraintLayout 中的一个重要属性&#xff0c;用于控制一个视图在父视图或相关视图中水平位置的偏移。这种偏移通过在0到1之间的浮点值来设置&#xff0c;0代表完全靠近左边或起始位置&#xff0c…

Windows双网卡冲突导致网页加载过慢的解决方法 (修改跃点无效 远程桌面连接)

【本文发布于https://blog.csdn.net/Stack_/article/details/145494160&#xff0c;未经许可不得转载&#xff0c;转载须注明出处】 办公室内&#xff0c;我的笔记本和台式机都连接WIFI进行上网&#xff0c;网段是192.168.0.x&#xff0c;网关192.168.0.101 现在要通过Windows自…

轻量级服务器http-server

安装 sudo npm install http-server -g 运行 1. 直接去到要跑起来的目录&#xff0c;在终端输入 cd xxxx文件夹http-server //只输入http-server的话&#xff0c;更新了代码后&#xff0c;页面不会同步更新http-server -c-1 //同步更新页面http-server -a 127.0.0.1 -p 808…

代码随想录算法【Day38】

Day38 322. 零钱兑换 思路 完全背包 代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for (int i 0; i < coins.size(); i) { // 遍历物品for (int j coins[i]; j <…

python+opencv+open3d实现鼠标手画多边形裁剪分割点云操作

👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… ​💫签名:面朝大海,春暖花开! python+opencv+open3d实现鼠标手画多边形裁剪分割点云操作 引言使用效果:代码pcd_roi_crop.py:引言 当我们想对一个不规则物体的图像或者点云裁剪时,直接手动输入…

STM32的HAL库开发---通用定时器(TIMER)---定时器脉冲计数

一、脉冲计数实验原理 1、 外部时钟模式1&#xff1a;核心为蓝色部分的时基单元&#xff0c;时基单元的时钟源可以来自四种&#xff0c;分别是内部时钟PCLK、外部时钟模式1&#xff0c;外部时钟模式2、内部定时器触发&#xff08;级联&#xff09;。而脉冲计数就是使用外部时钟…

Redis05 - 性能调优和缓存问题

Redis性能调优和缓存问题 文章目录 Redis性能调优和缓存问题一&#xff1a;链路追踪判断是不是redis出了问题二&#xff1a;redis变慢原因1&#xff1a;使用复杂度过高的命令(*)1.1&#xff1a;查看redis慢日志1.2&#xff1a;延迟变大原因分析1.3&#xff1a;解决方案 2&#…

漫步 C++ 之途,领略引用的独特风姿

在C中&#xff0c;引用&#xff08;Reference&#xff09;是一种非常有用的特性&#xff0c;它允许为一个变量创建一个别名&#xff08;Alias&#xff09;。引用在很多情况下可以替代指针&#xff0c;但使用起来更加方便和安全。以下是对C引用的详细介绍&#xff0c;包括其定义…