爬虫项目-爬取股吧(东方财富)评论

news2024/11/27 4:19:01

1.最近帮别人爬取了东方财富股吧的帖子和评论,网址如下:http://mguba.eastmoney.com/mguba/list/zssh000300

2.爬取字段如下所示:
在这里插入图片描述
3.爬虫的大致思路如下:客户要求爬取评论数大于5的帖子,首先获取帖子链接,然后根据链接的列表进行遍历,爬取相应的信息:

4.对于刚入门的朋友可以修改,如下chromedriver的地址,在相关第三方库都安装的情况下运行代码:
在这里插入图片描述
5.完整代码如下所示,在修改第二步之后是可以直接运行的,如果不能成功运行可以下面评论,或者私聊我,我会帮你解答。

import csv
import random
import re
import time
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import dateutil.parser as dparser
from random import choice
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


chrome_options = webdriver.ChromeOptions()
# 添加其他选项,如您的用户代理等
# ...

# 指定 Chrome WebDriver 的路径
driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=chrome_options)
## 时间节点
start_date = dparser.parse('2019-06-01')
## 浏览器设置选项
# chrome_options = Options()
chrome_options.add_argument('blink-settings=imagesEnabled=false')


def get_time():
    '''获取随机时间'''
    return round(random.uniform(3, 6), 1)


def get_user_agent():
    '''获取随机用户代理'''
    user_agents = [
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
        "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
        "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
        "Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20",
        "Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)",
        "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
    ]
    ## 在user_agent列表中随机产生一个代理,作为模拟的浏览器
    user_agent = choice(user_agents)
    return user_agent


def get_detail_urls_by_keyword(list_url):
    '''获取包含特定关键字的留言链接'''
    user_agent = get_user_agent()
    chrome_options.add_argument('user-agent=%s' % user_agent)
    drivertemp = webdriver.Chrome(options=chrome_options)
    drivertemp.maximize_window()
    drivertemp.get(list_url)

    # 循环加载页面或翻页,提取包含特定关键字的留言链接
    comments_link,link,title = [],[],[]

    page = 1
    while True:
        try:
            next_page_button = WebDriverWait(drivertemp, 30).until(
                EC.element_to_be_clickable((By.CLASS_NAME, "nextp")))
            if page >= 2:
                break
            if next_page_button.is_enabled():
                next_page_button.click()
                page += 1
            else:
                break
        except TimeoutException:
            # 当找不到下一页按钮时,抛出TimeoutException,结束循环
            break
        time.sleep(3)

        titles = drivertemp.find_elements_by_xpath('//div[@class="title"]')
        for element in titles:
            message_id = element.text.strip().split(':')[-1]
            title.append(message_id)

        comment = drivertemp.find_elements_by_xpath('//div[@class="reply"]')
        for element in comment:
            message_id = element.text.strip().split(':')[-1]
            comments_link.append(message_id)

        links = drivertemp.find_elements_by_xpath('//div[@class="title"]//a[@title]')
        for element in links:
            href = element.get_attribute("href")
            link.append(href)


    drivertemp.quit()
    return link,comments_link,title




list_url = "http://mguba.eastmoney.com/mguba/list/zssh000300"
link, comments_link,title = get_detail_urls_by_keyword(list_url)

# print(title)
# print(link)
# print(comments_link)

# 示例的 link 和 comments 列表

final_link = []  # 用于存储符合条件的链接
final_comments = []
final_title = []
comment_counts = [int(link) for link in comments_link]
# 遍历 link 和 comments 列表,检查 comments 中的元素是否大于 5
for i in range(10,len(link)):
    if comment_counts[i] > 5:
        final_link.append(link[i])
        final_comments.append(comments_link[i])
        final_title.append(title[i])

print(final_title)

def get_information(urls):
    coments_n, date, title, reply, article = [], [], [], [], []
    for url in urls:
        '''获取包含特定关键字的留言链接'''
        user_agent = get_user_agent()
        chrome_options.add_argument('user-agent=%s' % user_agent)
        drivertemp = webdriver.Chrome(options=chrome_options)
        drivertemp.maximize_window()
        drivertemp.get(url)

        titles = drivertemp.find_elements_by_xpath('//div[@class="article-head"]//h1[@class="article-title"]')
        for element in titles:
            message_id = element.text.strip().split(':')[-1]
            title.append(message_id)

        dates = drivertemp.find_elements_by_xpath('//div[@class="article-meta"]//span[@class="txt"]')
        for element in dates:
            message_time = element.text.strip()
            date.append(message_time)

        articles = drivertemp.find_elements_by_xpath('/html/body/script[20]')
        for element in articles:
            message_time = element.get_attribute("text")
            print(message_time)
            #match = re.search(r'\"desc\":\"(.*?)\"', message_time)
            match = re.search(r'(?<=desc:").*?(?=")', message_time)
            if match:
                desc = match.group(0)
                max_line_length = 15
                desc_lines = [desc[i:i + max_line_length] for i in range(0, len(desc), max_line_length)]
                desc_text_formatted = "\n".join(desc_lines)
                article.append(desc_text_formatted)


        replies = drivertemp.find_elements_by_xpath('//div[@class="short_text"]')
        Replies = []
        for element in replies:
            message_time = element.text.strip().split(':')[-1]
            Replies.append(message_time)
        number = len(Replies)
        coments_n.append(number)
        Reply = "\n".join([f"{i + 1}. {comment}" for i, comment in enumerate(Replies)])
        reply.append(Reply)


    drivertemp.quit()
    return coments_n , date, title, reply,article

coments_n, date, title, reply,article = get_information(final_link)

print(reply)
print(article)
print(date)


# 将这些列表组合成一个包含五个列表的列表
data = list(zip(final_comments, date, title, reply, article))

# 指定要保存的CSV文件名
csv_filename = "example3.csv"


# 修改字典中的键名称,使其与列名匹配
data = [
    {"评论数量": c, "日期": d, "帖子标题": t, "帖子的评论": r, "帖子内容": a}
    for c, d, t, r, a in data
]

# 使用csv模块创建CSV文件并写入数据,同时指定列名
with open(csv_filename, 'w', newline='') as csvfile:
    fieldnames = ["评论数量", "日期", "帖子标题", "帖子的评论", "帖子内容"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    # 写入列名
    writer.writeheader()

    # 写入数据
    writer.writerows(data)

print(f"Data has been written to {csv_filename}")

6.有需要爬取数据的朋友,或者学习技术的朋友都可以联系我,如果觉得对你有帮助,记得点个赞哦!!!!!!

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

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

相关文章

淘宝预定商品收不到尾款通知 - 解决方案

问题 用户在使用淘宝购买预定商品后&#xff0c;待补尾款时&#xff0c;无法收到尾款通知&#xff0c;从而导致错过补齐尾款无法购买预定商品&#xff0c;下文介绍解决方案。 解决方案 进入淘宝后&#xff0c;购买预定商品时&#xff0c;在提交订单页面时&#xff0c;取消勾…

雨水收集设施模块收集和利用雨水成为解决城市供水矛盾的途径之一

雨水收集设施模块是一种高效、环保的雨水收集和利用系统&#xff0c;它通过收集和利用雨水来解决城市供水矛盾。 雨水收集设施模块主要由雨水收集器、储水池、过滤器和水泵等组成。当雨水流入雨水收集器时&#xff0c;经过过滤器的过滤&#xff0c;进入储水池中储存。当需要用…

算法模板之单调栈解密 | 图文详解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️单调栈讲解1.1 &#x1f514;单调栈的定义1.2 &#x1f514;如何维护一个单…

【错误解决方案】ModuleNotFoundError: No module named ‘selenium‘

1. 错误提示 ModuleNotFoundError: No module named selenium&#xff0c;这意味着你试图导入一个名为 selenium 的模块&#xff0c;但Python找不到这个模块 2. 解决方案 安装缺失的模块: 如果你确定模块名称正确但仍然收到这个错误&#xff0c;那么可能是你没有安装这个模块…

二维码智慧门牌管理系统升级:详细展示门牌信息,让你的生活更便捷

文章目录 前言一、旧问题的解决与升级特点二、满足信息平台要求 前言 随着科技的不断发展&#xff0c;我们的生活正日益智能化。其中&#xff0c;二维码智慧门牌管理系统成为了智能生活的一个重要组成部分。最近&#xff0c;这一系统经过新的升级&#xff0c;为我们的生活带来…

HTML5+CSS3实现小米商城(课程设计版)

前言 这个小米商城用到了htmlcssjs&#xff0c;内容是今年6月份的。 结构相对简单&#xff0c;比较容易理解。 如果想要纯htmlcss实现的小米商城&#xff0c;可以看我的这个作品 HTMLCSS实现小米商城 如果需要其他网页作品了&#xff0c;可以看主页其他作品。 HTMLCSS实现华为…

文档QA综述:关于多页文档,多模态,检索增强最新的进展

关于Document&#xff0c;Multimodal&#xff0c;RAG最新的进展 一&#xff1a;PDFTriage 一&#xff1a;PDFTriage 题目: PDFTriage: Question Answering over Long, Structured Documents 机构&#xff1a;斯坦福大学&#xff0c;Adobe Research 论文: https://arxiv.org/pd…

MAC苹果电脑系统清理垃圾软件CleanMyMac4.15

如今电脑成为大多数人工作的工具&#xff0c;使用得越久就越需要清理垃圾软件。系统垃圾、废纸娄垃圾、大型和旧文件这些通常都占用了我们的电脑几G的空间。 想要清除不必要的垃圾文件&#xff0c;可以使用mac卸载软件CleanMyMac X&#xff0c;这款清理垃圾软件可以智能扫描Ma…

探索Kosmos-2模型的神奇功能

Kosmos-2是一个多模态大语言模型&#xff0c;它可以理解和生成包含图像和文本的内容。它的特点是能够将文本中的指代表达式&#xff08;如“这个”、“那个”等&#xff09;与图像中的物体对应起来&#xff0c;实现局部理解和交互。如果你想使用Kosmos-2模型&#xff0c;你可以…

《人工智能算法图解》书籍推荐

书籍介绍 今天&#xff0c;人工智能在我们的生活中随处可见。它能推送我们喜欢的电视节目&#xff0c;帮助我们诊断疑难杂症&#xff0c;还能向我们推荐商品。因此&#xff0c;让我们掌握人工智能的核心算法&#xff0c;拥抱日新月异的智能世界吧。 与那些充斥着公式和术语的教…

超详细的wheel轮子下载和.whl安装

wheel安装 pip安装失败问题 基于Anaconda进行 pip install ,报如下 但基于此路径下安装.whl文件时候&#xff0c;会报如下 通过在可借鉴的博客上查找相关原因&#xff0c;发现原来是因为版本没有匹配的问题&#xff0c;基于此问题以及博客中的解决方案&#xff0c;进行亲测…

CDR2024免费版服装设计工具

cdr是CorelDRAW的简称&#xff0c;一款专注排版和矢量图形编辑的平面设计软件。这款软件的设计界面精微细致、简洁易懂。功能尤其强大&#xff0c;图标设计&#xff0c;印刷排版&#xff0c;服装设计等都可以胜任。还有多种模板使得设计相当的轻松&#xff0c;今天简单介绍一下…

ACTIVE_MQ学习

ActiveMq学习①___入门概述https://blog.csdn.net/qq_45905724/article/details/131796502 ActiveMq学习②__安装与控制台https://blog.csdn.net/qq_45905724/article/details/133893214 ActiveMq学习③___Java编码实现ActiveMQ通讯https://blog.csdn.net/qq_45905724/articl…

【漏洞复现】weblogic-CVE-2018-2894-任意文件上传漏洞复现

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 漏洞复现WebShell 复现环境&#xff1a;Vulhub 访问 http://192.168.80.141:7001/console/&#xff0c;即可看到后台登录页面 执行sudo docker-compose logs | grep password可…

基于nodejs+vue贝佳月子会所服务平台系统- 计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

CleanMyMac软件4.15免费苹果电脑文件清理工具

mac系统进行文件清理&#xff0c;一般是直接将文件拖动入“废纸篓”回收站中&#xff0c;然后通过清理回收站&#xff0c;就完成了一次文件清理的操作&#xff0c;但是这么做并无法保证文件被彻底删除了&#xff0c;有些文件通过一些安全恢复手段依旧是可以恢复的&#xff0c;那…

wandb 安装本地部署使用教程

1、官网注册 wandb.ai是一个为机器学习开发者提供的开发工具平台&#xff0c;可以帮助用户跟踪实验&#xff0c;管理和版本数据&#xff0c;以及与团队协作&#xff0c;从而更专注于构建最佳模型。 wandb官网&#xff1a; https://wandb.ai 首先我们打开官网注册号自己的账号并…

Quartz介绍

一、前言 几乎所有系统都需要定时任务&#xff0c;如果系统中定时任务比较少并且是单机环境的直接使用SpringTask即可&#xff0c;如果定时任务比较多且需要经常维护或者要部署在分布式环境中就要考虑使用Quartz或者xxl-job等开源框架&#xff0c;今天我们来了解一下Quartz的基…

Linux的常见指令(二)

目录 一、mv 二、cat 三、more 四、less 五、head 六、tail 七、date 八、cal 一、mv 可以用来移动文件或者将文件改名&#xff08;move (rename) files&#xff09;&#xff0c;是Linux系统下常用的命令&#xff0c;经常用来备份文件或者目录。 功能&#xff1a; 1…

Java21-虚拟线程小试牛刀-meethigher

其他语言&#xff0c;如Go早期就支持了叫做协程的东西&#xff0c;它是轻量化后的线程&#xff0c;而Java异步编程却只有线程的概念。JDK8以后的升级带来的改变总体感觉不大&#xff0c;不过这次JDK21带来的Virtual Thread还是值得体验一把的&#xff0c;可以说是YYDS&#xff…