用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载

news2024/11/18 21:40:39

用 Python selenium爬取实时股票新闻并存入mysql数据库中

  • 1.分析需求
  • 2.创建表
  • 3.分析需要爬取的网页内容
  • 4.python里面selenium进行爬虫操作
    • 1.添加包
    • 2.连接数据库
    • 3.selenium爬虫前配置
    • 4.对股票新闻内容爬取并存入mysql中
    • 5.翻页功能
    • 6.运行程序

首先我们先明确我们的主要目标就是要爬取网站的股票新闻,并将爬取到的内容存入到mysql里面去具体流程就如下图所示
如果需要完整的代码可以直接到这些下载,觉得文章不错的话欢迎点赞,收藏,打赏
Python爬取股票新闻并存入mysql数据库

1.分析需求

Created with Raphaël 2.3.0 开始爬虫 股票新闻 爬取成功存入数据库 新闻内容存入数据库 yes no

我们主要就是针对于7x24小时股票新闻的新闻进行爬取,里面的新闻内容较多,由于我们需要存入mysql数据库里面所以我们先搞定数据库先,当然csv格式进行存储也是可以,不过由于我需要在我自己的django项目中显示出来需要就需要用到mysql数据库
在这里插入图片描述

2.创建表

首先我们需要爬取的主要内容有三个,第一个就是新闻时间,第二个就是新闻的网页地址,第三个就是新闻的内容所以我们的表就创建三个即可,如果你自己想要创建更多复杂的内容的话就可以自己新增字段然后再爬取进去也是可以的
CREATE TABLE abc (
id int NOT NULL AUTO_INCREMENT,
new_time datetime(6) NOT NULL,#新闻时间
new_sources varchar(100) NOT NULL,#新闻的网页地址
new_content varchar(500) NOT NULL,#新闻的内容
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=263 DEFAULT CHARSET=utf8mb3;

3.分析需要爬取的网页内容

首先找到开发人员工具选项或者右键审查元素也可以这里根据你用的浏览器灵活进行更改
在这里插入图片描述
然后再用这个小箭头点击你要审查的元素,点击新闻内容就可以显示里面的元素
在这里插入图片描述
找到我们需要的新闻内容
在这里插入图片描述
再点击外框可以发现我们所有需要的内容都是在livenews-media这个标签里面
在这里插入图片描述
再点进去我们可以看到time就是我们想要的新闻时间不过这个时间只是一个小时和分时,我们需要带年月日不然后期数据存入数据库里面会非常乱,这里就要改。
在这里插入图片描述
再从media-title-box font_0点进去我们可以看到一个href后带有超链接和a标签里面有我们需要的新闻内容在这里插入图片描述
目前为止我们就可以大致梳理清楚我们要爬取的内容就是time标签内的内容,a标签内href里面的超链接,a标签里面的新闻内容。

4.python里面selenium进行爬虫操作

1.添加包

这里面我们需要time包用来将时间更改存入mysql中,pymysql进行Python和mysql的连接,selenium进行内容爬取

import time
import pymysql
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from apscheduler.schedulers.blocking import BlockingScheduler
from selenium.webdriver import Chrome, ChromeOptions

2.连接数据库

# //连接数据库
conn = pymysql.connect(host='localhost',  # host属性
                       port=3306,  # 端口号
                       user='',  # 用户名
                       pasrd='',  # 此处填登录数据库的密码(由于无法在文章内显示密码为英文的密码单词,请自行修改)
                       db='' , # 数据库名
                       charset='utf8'
                       )

3.selenium爬虫前配置

如果不了解selenium可以去看这一篇文章
selenium用法详解【从入门到实战】【Python爬虫】【4万字】
由于我本人不需要selenium去进行爬虫界面显示,所以将爬虫界面给关闭,如果你需要看爬虫在浏览器内干的活那么你就需要把opt这两段注释掉即可,这里我用的Chrome浏览器的内核

opt = ChromeOptions()            # 创建Chrome参数对象
opt.headless = True              # 把Chrome设置成可视化无界面模式,windows/Linux 皆可
# Chrome浏览器
driver = webdriver.Chrome()
driver.get("")#爬取的网页地址

4.对股票新闻内容爬取并存入mysql中

def index():
    # 设置等待5秒,避免爬虫时被封禁
    driver.implicitly_wait(5)
    # 找到外框的获取里面所有的li标签
    lis = driver.find_elements_by_xpath("//*[@class='livenews-media']")
    for i,li  in enumerate(lis):
        # debug后发现lis里面len获取最大值是50,所以直接for循环给他控制在50次就退出操作
        if i < 50:
            # 获取url
            line = li.find_element_by_css_selector("a.media-title").get_attribute('href')
          # 获取时间,第一次获取text内容实用get_attribute发现获取的内容是空值,所以改用.text获取到值
          #   time24 = li.find_element_by_css_selector('span.time').get_attribute('text')
            time24 = li.find_element_by_css_selector('span.time').text
            # 获取本地时间
            b = time.strftime('%Y-%m-%d ', time.localtime(time.time()))
            # 与获取到的时间进行拼接获取可以进入数据库里面时间格式
            d = b + time24
            newtext = li.find_element_by_css_selector("a.media-title").get_attribute('text')
            print(d,line,newtext)
            # 获取一个光标
            cursor = conn.cursor()
            # 插入数据,insert into mysql表名(列名,列名,列名)values(值,值,值)这个值主要就是对应的你获取到的值
            sql = 'insert into abc(new_time,new_sources,new_content) values(%s,%s,%s);'
            # 对获取到的数据进行排序如果有重复的则进行筛除
            data_list=[d,line,newtext]

            list2 = sorted(list(set(data_list)), key=data_list.index)

            try:
             # 插入数据
             cursor.execute(sql,list2)

            # 连接数据
             conn.commit()
             print('插入数据成功')
            except Exception as e:
                     print('插入数据失败')
                     conn.rollback()
            time.sleep(5)
        else:
            driver.quit()
            # 关闭数据库
            conn.close()

5.翻页功能

如果有些网站可以对li标签内进行点击翻页那就不用模拟键盘翻页操作,这里range()里面的内容就代表页数可自行修改

# 翻页功能,selenium模拟键盘自动翻页
for j in range(1):
        index()
        driver.implicitly_wait(5)
        # driver.switch_to.window(driver.window_handles[-1])
        #页面点击跳转下一页,因为无法识别到li里面的标签所以就用键盘右键换页的方法替代
        ActionChains(driver).key_down(Keys.CONTROL).send_keys(Keys.RIGHT).key_up(Keys.CONTROL).perform()

        time.sleep(5)

还有就是翻页之后由于selenium无法识别新的页面就需要告知selenium当前页面为新页面,需要用以下代码

driver.switch_to.window(driver.window_handles[-1])

如果翻页之后没有出现新的窗口那就不需要对新的窗口进行关闭,如果翻页之后出现新的窗口就需要对新的窗口进行关闭操作也就是driver.close()

6.运行程序

成功将内容插入到mysql数据库当中

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

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

相关文章

5、SySeVR复现——Data preprocess(上)

目录 1、环境 2、生成切片对应的hash 3、获取要删除的切片位置信息 4、对切片进行token化 1、环境 从数据预处理开始&#xff0c;操作系统&#xff1a;windows 10 &#xff0c;软件&#xff1a;pycharm 注&#xff1a;对官方提供的文件&#xff0c;做了一些改动&#xff0c…

插槽 slot

文章目录一、什么是插槽二、插槽内容三、渲染作用域四、默认内容五、具名插槽六、作用域插槽一、什么是插槽 我们使用 <slot> 作为一个占位符&#xff0c;父组件就可以把要传递的内容显示到占位符所在位置上&#xff0c;提高组件使用的灵活性。 二、插槽内容 父组件向…

安信可VC系列语音识别的使用教程

安信可VC-02语音识别的应用&#xff0c;本篇只讲述在Windows系统下的应用。Linux下的请参考官方文档介绍和说明。 1-安信可VC-02离线语音识别简介 VC系列模组是我司开发的一款AI离线语音识别的产品&#xff0c;主芯片是云知声推出的离线语音识别芯片锋鸟M(US516P6)&#xff0c…

Redis基础语法和SpringBoot集成使用

在初期&#xff0c;已经讲述了Redis安装问题。现在正式进入Redis的入门阶段。 Redis客户端 命令行客户端 redis-cli [options] [commands]常用到的 options 有&#xff1a; -h 127.0.0.1: 指定要连接的Redis的IP地址【默认127.0.0.1】-p 6379: 指定连接Redis的端口【默认63…

jenkins前端页面自动运维值yarn编译运行项目

配置步骤如下 首先需要在系统管理中心安装node相关插件 安装完成之后&#xff0c;在系统管理——>全局工具配置——>NodeJS 点击新增Nodejs 此处自定义别名&#xff0c;我这里是Nodejs16&#xff0c;取消自动安装前面的复选框&#xff0c;下方选择我们的nodejs安装目录&…

云服务器定时执行python脚本

文章目录前言crontab简介基本语法定时任务具体内容python 脚本定时任务前言 在服务器上定时执行任务有两种方式&#xff0c;一种是at定时任务&#xff0c;一种是crond任务调度&#xff0c;at命令是一次性定时计划任务&#xff0c;at的守护进程 atd会以后台模式运行&#xff0c…

Spring注解之@validated使用

概念 spring-boot中可以用validated来校验数据&#xff0c;如果数据异常则会统一抛出异常&#xff0c;方便异常中心统一处理。 注解源码&#xff1a; Validated 作用在类、方法和参数上 Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER}) Retention(…

python初级教程十一 urllib

urllib Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; urllib.request - 打开和读取 URL。 urllib.error - 包含 urllib.request 抛出的异常。 urllib.parse - 解…

【Python入门指北】操作数据库

文章目录一、1.数据库2.练手案例二、redis数据库一、 1.创建一个数据库 [guanmaster1 ~]$ mysql -uroot -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL…

Apache IoTDB PMC 乔嘉林荣获 2022 杰出开源贡献者|开源技术强大,开源文化活跃...

2022 年 12 月 29 日至 30 日&#xff0c;2022 木兰峰会正式召开&#xff0c;会上发布了中国开源云联盟 2022 年度评选名单。本次评审专家包括数十位开源领域专家、社区领袖、科研院所专家&#xff0c;共评选出杰出开源贡献者 3 人。其中&#xff0c;清华大学助理研究员、博士后…

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.16 完结和后续:《Qt开发专题-自定义控件》

本节对应的视频讲解&#xff1a;B_站_视_频 https://www.bilibili.com/video/BV1NW4y1K7eL 1. 为什么需要自定义控件 绘图最大的一个应用场景就是自定义控件&#xff0c;Qt 本身提供的一些控件是有限的&#xff0c;并且它提供的一些控件很可能不满足我们的需要 这种情况下&a…

pygame - 图片移动优化

目录 一、优化过程分析 1、pygame - 图片移动中图片移动模式 2、优化过程 二、代码段 1、附注释 2、无注释 三、效果展示 一、优化过程分析 1、pygame - 图片移动中图片移动模式 按一次方向键&#xff0c;图片移动一小步&#xff1b; 若需要一直往某个方向移动&…

【LaTex】LaTex 极简安装教程

文章目录Latex 安装教程1. 下载texlive.iso2. 点击装载3. 运行 install-tl-windows.bat 进行安装4. 验证是否安装成功5. 安装开发工具Latex 安装教程 1. 下载texlive.iso https://mirrors.tuna.tsinghua.edu.cn/ctan/systems/texlive/Images/ 2. 点击装载 下载完成后&#x…

【博客580】内核如何决定数据包的源ip

内核如何决定数据包的源ip 1、Traversing of packets Receive&#xff1a; 某个interface收到数据包 -> PREROUTING (manage, nat) -> routing -> 是发送给本机的数据包? -> INPUT (manage, filter) -> app 不是 -> FORWARD (manage, filter) -> POST…

《Dubbo源码剖析与实战》学习笔记 Day1

流量控制 为了系统的健壮性和稳定性考虑&#xff0c;通常要对访问进行有效的控制&#xff0c;防止流量突然暴增&#xff0c;引发一系列服务雪崩效应。 1.单机限流 大概逻辑就是把每个请求当作一个小朋友&#xff0c;把最细粒度Dubbo服务中的方法当作游乐场&#xff0c;每个方…

Go第 12 章 :1-家庭收支记账软件项目

Go第 12 章 &#xff1a;1-家庭收支记账软件项目 12.1 项目开发流程说明 12.2 项目需求说明 模拟实现基于文本界面的《家庭记账软件》该软件能够记录家庭的收入、支出&#xff0c;并能够打印收支明细表 12.3 项目的界面 12.4 项目代码实现 12.4.1 实现基本功能(先使用面向过…

Windows 10/11 中的快速录屏的 5 种方法

在当今世界&#xff0c;出于各种原因&#xff0c;人们更喜欢录制他们的 PC 屏幕。录制计算机屏幕的功能对于在线学习、录制在线会议的特定亮点或帮助您制作抖音视频至关重要。不管是什么原因&#xff0c;屏幕录制让许多人的生活更轻松。截屏是有效的&#xff0c;但录制有助于您…

聚簇索引,二级索引,MRR,联合索引和自适应哈希索引-详细总结

目录 聚簇索引&#xff0c;二级索引&#xff0c;MRR&#xff0c;联合索引和自适应哈希索引-详细总结 聚簇索引 定义&#xff1a; 问题&#xff1a;为什么不采用B树作为MySQL表数据底层的存储数据结构&#xff1f; 作图&#xff1a; 问题&#xff1a;如果数据库表没有设置…

base64和base64url编解码

文章目录[toc]前言1. Base64编码原理2. 加解密图示3. base64编码Code3. base64url编码Code前言 一个字节可以表示256种数值&#xff0c;但是由于一些字节在网络中有特殊的含义。所以当传输字节内容时就不能传输这些具有控制功能的字符。具体的做法就是将这些字符进行转码。   …

A. Sasha and a Bit of Relax(异或的性质 + 前缀和的性质)

Problem - 1109A - Codeforces Sasha喜欢编程。有一次&#xff0c;在一场很长时间的比赛中&#xff0c;萨沙觉得他有点累了&#xff0c;需要放松一下。他照做了。但由于萨沙不是一个普通人&#xff0c;他更喜欢不同寻常地放松。在闲暇时间&#xff0c;萨沙喜欢解决未解决的问题…