数据采集作业4

news/2024/12/28 8:58:32/文章来源:https://www.cnblogs.com/ming7511/p/18553318

数据采集作业四

gitee链接:https://gitee.com/wangzm7511/shu-ju/tree/master/作业4

1.使用 Selenium 爬取股票数据的实战

需求:

  • 熟练掌握 Selenium 查找 HTML 元素,爬取 Ajax 网页数据,等待 HTML 元素等内容。
  • 使用 Selenium 框架 + MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块的股票数据。
  • 数据来源网站:东方财富网 网址。

数据存储格式:

  • 输出信息:MYSQL 数据库存储和输出格式如下表,表头应是英文命名,例如:
    • 序号:id
    • 股票代码:bStockNo
    • 股票名称:bStockName
    • 最新报价:bLatestPrice

数据格式示例如下:

序号 股票代码 股票名称 最新报价 涨跌幅 涨跌额 成交量 成交额 振幅 最高 最低 今开 昨收
1 688093 N 世华 28.47 62.22% 10.92 26.13 万 7 亿 22.34 32.0 28.08 30.2 17.55
2 ... ... ... ... ... ... ... ... ... ... ... ...

过程:

1. 爬虫开发概述

在此次实战中,我们通过 Selenium 模拟浏览器操作,爬取东方财富网的股票数据。目标是提取“沪深 A 股”、“上证 A 股”、“深证 A 股”三个板块的股票信息,并将数据存入 MySQL 数据库。使用 Selenium,可以通过模拟用户在网页上的操作,如点击、滚动等,自动化完成数据抓取。此外,MySQL 数据库用于存储从网页上爬取到的数据,方便后续的数据分析与展示。

2. 数据爬取的具体步骤

  • 确定爬取内容与结构

    • 在开始爬取之前,我们通过分析网页结构,确定需要的数据和元素位置。通过浏览器的开发者工具(通常按 F12 键)查看 HTML 代码结构,找到了相关数据所在的 <tbody> 标签,且每个股票的数据位于 <tr> 元素中,每个字段在不同的 <td> 中。
  • 使用 Selenium 进行元素定位与数据提取

    • 使用 Selenium 框架控制 Chrome 浏览器,并配置为无头模式(即不显示浏览器窗口)。使用 Selenium 的方法(如 find_element()find_elements())定位到每个股票的行数据,并获取每一列的数据。
  • 爬取多个板块的数据

    • 我们设置了一个循环,分别爬取“沪深 A 股”、“上证 A 股”、“深证 A 股”三个板块。通过点击不同的导航选项卡,切换到对应的板块,并对每个页面的数据进行爬取。
  • 翻页处理

    • 由于每个板块的数据量较大,通常需要翻页才能爬取所有数据。因此,爬虫脚本中添加了翻页功能,通过定位“下一页”按钮并进行点击,完成多页的数据抓取。

3. 数据存储

爬取到的数据需要存入 MySQL 数据库。首先创建了一个名为 stocks 的数据库,并根据不同的板块创建了三张表。每张表的字段与爬取的数据字段一一对应,以便于将爬取的数据存储进去。

MySQL 表结构示例

```sql CREATE TABLE nav_hs_a_board (id INT PRIMARY KEY,stock_code VARCHAR(16),stock_name VARCHAR(32),latest_price VARCHAR(32),change_rate VARCHAR(32),price_change VARCHAR(32),volume VARCHAR(32),turnover VARCHAR(32),amplitude VARCHAR(32),highest_price VARCHAR(32),lowest_price VARCHAR(32),opening_price VARCHAR(32),previous_close VARCHAR(32) ); ```

4. 遇到的挑战和解决方案

  • 页面加载等待:有些数据在页面加载时需要一些时间才能显示出来,因此我们使用 Selenium 的显式等待功能 (WebDriverWait) 来确保页面元素加载完毕后再进行数据抓取。

5. 爬虫代码实现

代码主要包含以下几部分:

  • 初始化 Selenium 浏览器驱动。
  • 连接 MySQL 数据库,并创建数据表。
  • 通过 Selenium 爬取东方财富网的股票数据。
  • 将数据插入到 MySQL 数据库中。

以下是简化版代码的片段,展示了如何使用 Selenium 进行数据爬取并存储到 MySQL:

import pymysql
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 初始化 Chrome 浏览器配置
chrome_options = Options()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)# 连接 MySQL 数据库
connection = pymysql.connect(host="localhost", user="root", passwd="密码", db="stocks", charset="utf8mb4")
cursor = connection.cursor()# 打开目标网页
browser.get("http://quote.eastmoney.com/center/gridlist.html#hs_a_board")# 爬取股票数据
wait = WebDriverWait(browser, 10)
rows = browser.find_elements(By.XPATH, "//table[@id='table_wrapper-table']/tbody/tr")
for row in rows:stock_code = row.find_element(By.XPATH, "./td[2]/a").textstock_name = row.find_element(By.XPATH, "./td[3]/a").textlatest_price = row.find_element(By.XPATH, "./td[5]/span").text# 插入数据到 MySQLcursor.execute("INSERT INTO nav_hs_a_board (stock_code, stock_name, latest_price) VALUES (%s, %s, %s)",(stock_code, stock_name, latest_price))
connection.commit()
connection.close()

运行截图



总结

通过此次实战,我们使用 Selenium 成功地从东方财富网抓取了股票数据,并将数据存储到了 MySQL 数据库中。整个过程涉及了网页结构分析、元素定位、翻页、数据存储等多个环节,是对爬虫技术的一个全面练习。通过这种方式,我们可以实现对股票市场数据的自动化采集,为进一步的数据分析奠定基础。希望本次分享对你有所帮助!

2.使用 Selenium 爬取中国 mooc 网站的课程数据

需求:

  • 熟练掌握 Selenium 查找 HTML 元素,模拟用户登录,爬取 Ajax 网页数据,等待 HTML 元素等内容。

  • 使用 Selenium 框架 + MySQL 数据库存储技术路线爬取中国 mooc 网站课程资源信息(课程编号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)。

  • 候选网站:中国 mooc 网:网址

  • 输出信息:将数据存储到 MySQL 中,表结构如下:

    • 课程编号:id
    • 课程名称:cCourse
    • 学校名称:cCollege
    • 主讲教师:cTeacher
    • 团队成员:cTeam
    • 参加人数:cCount
    • 课程进度:cProcess
    • 课程简介:cBrief

过程:

1. 项目目标和需求概述

在这次实战中,我们使用 Selenium 模拟浏览器操作来爬取中国 mooc 网站上的课程信息,包括课程名称、学校名称、主讲教师等信息。爬取到的数据存储到 MySQL 数据库中,便于后续的数据分析与展示。为了实现这些功能,我们编写了一个自动化脚本,包含以下几个主要部分:

  • 模拟用户登录过程
  • 爬取课程信息页面
  • 分页翻页爬取更多课程
  • 将爬取到的数据存入 MySQL 数据库

2. 数据爬取的具体步骤

1 模拟用户登录

  • 登录页面分析
    我们首先使用浏览器的开发者工具(通常按 F12 键)分析登录页面的结构,找到登录按钮、账号输入框、密码输入框等位置。通过 Selenium,我们可以模拟点击登录按钮,输入账号和密码,完成用户登录。
  • Selenium 实现自动化登录
    使用 Selenium 定位登录按钮并点击,随后切换到 iframe,完成账号密码的输入,最后点击登录按钮提交登录信息。

2 课程信息爬取

  • 打开搜索页面
    登录成功后,我们导航到课程搜索页面,通过分析网页结构,找到包含课程信息的元素。
  • 爬取多个页面的数据
    我们实现了翻页爬取功能,通过点击“下一页”按钮,自动获取每一页的课程信息。

3 页面滚动加载

  • 由于页面中的部分课程信息需要滚动加载,因此在每页爬取之前,我们使用 Selenium 进行模拟滚动,使得所有课程信息加载出来,以便完整爬取。

4 数据存储

  • MySQL 数据库创建和连接
    爬取的数据需要存储到 MySQL 数据库中。我们首先创建了一个名为 stocks 的数据库,并创建了一张名为 mooc 的表,用于保存课程的相关信息。
  • 数据表结构示例
    CREATE TABLE mooc (id INT AUTO_INCREMENT PRIMARY KEY,cCourse VARCHAR(255),cCollege VARCHAR(255),cTeacher VARCHAR(255),cTeam VARCHAR(255),cCount VARCHAR(50),cProcess VARCHAR(100),cBrief TEXT
    );
    
  • 每当成功爬取到一条课程信息,就将其插入到数据库中。

代码实现

以下是代码的主要部分,展示了如何使用 Selenium 进行数据爬取并将其存储到 MySQL 中:

import pymysql
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from lxml import etree
import timeclass MoocScraper:def __init__(self):# 初始化浏览器配置try:chrome_options = Options()chrome_options.add_argument('--headless')self.driver = webdriver.Chrome(options=chrome_options)print("浏览器初始化成功")except Exception as e:print(f"浏览器初始化失败: {e}")self.initialize_db()def initialize_db(self):# 初始化数据库并创建表格try:mydb = pymysql.connect(host="localhost",user="root",password="密码",charset='utf8mb4')with mydb.cursor() as cursor:cursor.execute("CREATE DATABASE IF NOT EXISTS stocks CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")cursor.execute("USE stocks")cursor.execute("""CREATE TABLE IF NOT EXISTS mooc (id INT AUTO_INCREMENT PRIMARY KEY,cCourse VARCHAR(255),cCollege VARCHAR(255),cTeacher VARCHAR(255),cTeam VARCHAR(255),cCount VARCHAR(50),cProcess VARCHAR(100),cBrief TEXT)""")mydb.commit()print("数据库初始化成功")except Exception as e:print(f"初始化数据库时发生错误: {e}")finally:if 'mydb' in locals():mydb.close()def login(self, url, phone, password):# 模拟登录过程...def scrape_courses(self, search_url):# 爬取课程信息...def parse_and_store(self, html):# 解析页面并存储到数据库...if __name__ == "__main__":scraper = MoocScraper()login_url = "https://www.icourse163.org/"search_url = "https://www.icourse163.org/search.htm?search=%20#/"scraper.login(login_url, '手机号', '密码')scraper.scrape_courses(search_url)scraper.close()

遇到的挑战和解决方案

  • 页面加载等待:有些页面中的元素加载较慢,为了保证爬虫能够稳定地抓取到所有数据,我们使用了 Selenium 的显式等待和 time.sleep() 来确保元素完全加载。

运行截图


总结

通过此次实战,我们利用 Selenium 成功地从中国 mooc 网站抓取了课程数据,并将其存储到了 MySQL 数据库中。整个过程涉及了网页结构分析、元素定位、翻页、数据存储等多个环节,是对 Selenium 爬虫技术的一个全面练习。通过这种方式,我们可以实现对在线课程信息的自动化采集,为后续的教育数据分析奠定基础。

如果你对代码实现有任何疑问,或者想了解更多关于 Selenium 的使用,欢迎在评论区与我交流!

3.华为云_大数据实时分析处理实验手册-Flume日志采集实验

1 Flume日志采集

1.1 任务一:Python脚本生成测试数据

1.2 任务二:配置Kafka

1.3 任务三:安装Flume客户端

1.4 任务四:配置Flume采集数据

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.6

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D 模拟高程数据(假设数据已经过某种方式插值或生成) 这里我们创建一个简单的40x50网格,并填充随机高程值 x = np.linspace(0, 43.65, 40) y = np.linspace(0, 58.2, 50) X, Y = …

2.1

import numpy as np import matplotlib.pyplot as plt 定义 x 的范围 x = np.linspace(-5, 5, 400) 计算三个函数的值 y_cosh = np.cosh(x) y_sinh = np.sinh(x) y_half_exp = 0.5 * np.exp(x) 创建图形和坐标轴 plt.figure(figsize=(10, 6)) ax = plt.gca() 绘制函数 ax.plot(…

2.2

import numpy as np import matplotlib.pyplot as plt from scipy.integrate import quad def fun(t, x): return np.exp(-t) * (t ** (x - 1)) x = np.linspace(0, 10, 100) # x 的范围 y = [quad(fun, 0, np.inf, args=i)[0] for i in x] # 计算积分 plt.plot(x, y) plt.xl…

Windows 右键新建文件添加指定后缀-bat批处理-c文件

前言全局说明一、说明 环境: Windows 7 旗舰版二、添加,创建 .bat 后缀文件 在命令行里执行下面两条命令 reg add HKCR\.bat\ShellNew /v nullfile /f >nul reg add HKCR\batfile /ve /d BAT批处理文件 /f >nul三、添加,创建 .c 后缀文件 reg add HKCR\.c\ShellNew /v …

数据结构(倒排索引)

倒排索引和正排索引倒排索引和正排索引 倒排索引是什么?倒排索引 也被称作反向索引(inverted index),是用于提高数据检索速度的一种数据结构,空间消耗比较大。倒排索引首先将检索文档进行分词得到多个词语/词条,然后将词语和文档 ID 建立关联,从而提高检索效率。分词就是…

旺仔水饺-冲刺日志 Day 6

作业所属课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称 旺仔水饺102201140 黎曼 102201138 黄俊瑶102201127 罗永辉 102201130 郑哲浩102202144 傅钰 102202147 赖越172209028 伊晓 052101418 陈…

服务器时间不对导致.NET SDK连接Minio失败

这两天想弄个简单的文件系统来做测试,选中了Minio,公司的测试环境是windows server2019,随手搜起一篇教程(MinIO注册成服务在后台运行(Win10)_minio windows 注册成服务在后台运行-CSDN博客),按图索骥,一顿操作猛如虎, 使用“WinSW”加入系统服务。打开网页一看,好使。…

关于成人自学考试的一些建议

关于自己能不能坚持考完自考这条路来说,你需要考虑你能否坚持1-6年的自考流程 关于答卷分数的问题,只是公布分数,不公布对错,次次考试要么分数很低, 要么分数高的离谱,严重怀疑分数评判的标准。真实性 本人考试了5年,疫情耽误1年,工商管理的课程,选考3科 比英语还难。…

8.8

from scipy.integrate import odeint import numpy as np import pylab as plt yx = lambda y,x: [y[1], np.sqrt(1+y[1]**2)/5/(1-x)] x0 = np.arange(0, 1, 0.00001) y0 = odeint(yx, [0,0], x0) plt.rc(font, size=16) plt.plot(x0, y0[:,0]); plt.show() 2023310143007

DML

1.通过使用insert into 表名 values(值1,值2,值3)如果插入的数据与列一一对应,那么可以省略列名,但如果希望向指定列上插入数据,就需要写出列名 2.insert into 表名(列名1,列名2)values(值1,值2);也可以一次性向数据库中插入多条数据 3.insert into 表名(列名1,列名…

多部门协作效率低下?项目管理工具能帮你解决!

在现代企业中,不同部门间的协作日益成为工作成功的关键。无论是市场部、产品部,还是运营部、财务部,部门之间的高效协作能显著提升整体产出,避免信息孤岛与资源浪费。然而,在实际工作中,跨部门合作常常面临各种挑战,比如沟通不畅、信息分散、目标不一致等。而项目管理软…