数据采集第四次实验

news/2024/11/14 1:45:20/文章来源:https://www.cnblogs.com/pythonav/p/18545142

作业1

仓库链接:https://gitee.com/jyppx000/crawl_project

作业①

要求:

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

1.1 代码和图片

代码:

"""
实现思路:1.连接数据库2.使用 selenium 打开 Chrome 浏览器,根据用户输入的选择(1、2、3),分别加载不同的网页链接3.数据爬取 遍历用户输入的页数 n 查找页面中的股票数据行 从每行中提取股票的详细信息,如代码、名称、最新报价4.存储数据:将提取的股票信息通过 INSERT 语句存入对应的数据库表中5.页面导航:模拟点击“下一页”按钮,继续爬取下一页数据
"""
import time
import pymysql
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChainsconn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', charset='utf8', db='east_money')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)driver = webdriver.Chrome()print("请输入需要查找的股票,1:沪深京,2:上证,3:深证")
while True:num = input("请输入:")if num == '1':# 沪深京A股driver.get("https://quote.eastmoney.com/center/gridlist.html#hs_a_board")table_name = "stocks_hs_a"breakelif num == '2':# 上证A股driver.get("https://quote.eastmoney.com/center/gridlist.html#sh_a_board")table_name = "stocks_sh_a"breakelif num == '3':# 深证A股driver.get("https://quote.eastmoney.com/center/gridlist.html#sz_a_board")table_name = "stocks_sz_a"breakcursor.execute(f'''CREATE TABLE IF NOT EXISTS {table_name}(id INTEGER PRIMARY KEY,code TEXT,name TEXT,latest_price TEXT,change_percent TEXT,change_amount TEXT,volume TEXT,turnover TEXT,amplitude TEXT,highest TEXT,lowest TEXT,open_price TEXT,close_price TEXT)''')cursor.execute(f"DELETE FROM {table_name}")n = input("请输入需要查找的页码:")
n = int(n)
# 爬取前n页股票信息
for page in range(1, n + 1):  # 爬取n页print(f"正在爬取第 {page} 页股票信息")# 定位所有股票信息的元素stocks_list = driver.find_elements(By.XPATH, "//div[@class='listview full']//tbody//tr")# 打印股票信息for stock in stocks_list:stock_id = stock.find_element(By.XPATH, './/td[1]').textstock_code = stock.find_element(By.XPATH, './/td[2]/a').textstock_name = stock.find_element(By.XPATH, './/td[3]/a').textstock_latest_price = stock.find_element(By.XPATH, './/td[5]//span').textstock_change_percent = stock.find_element(By.XPATH, './/td[6]//span').textstock_change_amount = stock.find_element(By.XPATH, './/td[7]//span').textstock_volume = stock.find_element(By.XPATH, './/td[8]').textstock_turnover = stock.find_element(By.XPATH, './/td[9]').textstock_amplitude = stock.find_element(By.XPATH, './/td[10]').textstock_highest = stock.find_element(By.XPATH, './/td[11]//span').textstock_lowest = stock.find_element(By.XPATH, './/td[12]//span').textstock_open_price = stock.find_element(By.XPATH, './/td[13]//span').textstock_close_price = stock.find_element(By.XPATH, './/td[14]').textsql = f"INSERT INTO {table_name} (id, code, name, latest_price, change_percent, change_amount, volume, turnover, amplitude, highest, lowest, open_price, close_price) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"cursor.execute(sql,[stock_id, stock_code, stock_name, stock_latest_price, stock_change_percent, stock_change_amount,stock_volume, stock_turnover, stock_amplitude, stock_highest, stock_lowest, stock_open_price,stock_close_price])conn.commit()print("数据已存入数据库")# 点击下一页按钮next_page_button = driver.find_element(By.XPATH, '//*[@id="main-table_paginate"]/a[2]')action = ActionChains(driver)time.sleep(5)action.move_to_element(next_page_button).perform()next_page_button.click()time.sleep(5)conn.close()
# 关闭浏览器
driver.quit()

图片:

1.2 作业心得

  • 加深了用 Selenium 控制浏览器自动抓取网页数据的技术栈
  • 深入了解了如何模拟点击“下一页”按钮抓取多页数据。

作业②

要求:

  • 熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
  • 使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)

2.1 代码和图片

代码:

"""
实现思路:1.启动浏览器并访问网站2.登录相关点击页面上的登录按钮切换到登录框的 iframe 内部输入手机号和密码进行登录3.访问课程搜索页面4.创建数据库并建立表格5.获取课程信息并存储到数据库
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
import sqlite3
import time
driver = webdriver.Chrome()
driver.get('https://www.icourse163.org/')
time.sleep(1)
button = driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div')
button.click()
time.sleep(1)
frame = driver.find_element(By.XPATH,"//div[@class='ux-login-set-container']//iframe")
driver.switch_to.frame(frame)
# 我这里的手机号和密码肯定不会放真实的,大家根据自己的实际来填写【学计算机多少会注重个人隐私】
account = driver.find_element(By.ID, 'phoneipt').send_keys('15306918501')
password = driver.find_element(By.XPATH, '//input[@placeholder="请输入密码"]').send_keys("123456")button1 = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/form/div/div[6]/a')
button1.click()
time.sleep(1)url = 'https://www.icourse163.org/search.htm?search=%E5%A4%A7%E6%95%B0%E6%8D%AE#/'
driver.get(url)
conn = sqlite3.connect('课程信息.db')
cursor = conn.cursor()
cursor.execute('''create table course(id INTEGER,课程名称 text, 学校名称 text,老师 text,教师团队 text,参加人数 text, 课程进度 text, 课程简介 text)
''')
count = 0
link_list = driver.find_elements(By.XPATH, '//div[@class="u-clist f-bgw f-cb f-pr j-href ga-click"]')
for link in link_list:count += 1course_name = link.find_element(By.XPATH, './/span[@class=" u-course-name f-thide"]').textschool_name = link.find_element(By.XPATH, './/a[@class="t21 f-fc9"]').textteacher = link.find_element(By.XPATH, './/a[@class="f-fc9"]').texttry:team_member = link.find_element(By.XPATH, './/span[@class="f-fc9"]/span').textteam_member = team_member + ' 、' + teacherexcept Exception as err:team_member = 'none'attendees = link.find_element(By.XPATH, './/span[@class="hot"]').textattendees.replace('参加', '')process = link.find_element(By.XPATH, './/span[@class="txt"]').textintroduction = link.find_element(By.XPATH, './/span[@class="p5 brief f-ib f-f0 f-cb"]').textcursor.execute('''insert into course(id ,课程名称 , 学校名称 ,老师 ,教师团队 ,参加人数 , 课程进度 , 课程简介)VALUES(?,?,?, ?, ?, ?, ?, ?)''', (count, course_name, school_name, teacher, team_member, attendees, process, introduction))conn.commit()
cursor.close()
conn.close()

图片:

2.2 作业心得

  • 使用自动化爬虫显著提高了数据采集的效率。与人工操作相比,它能够在极短的时间内完成大量数据的抓取,极大地节省了时间和人力成本。
  • 应对网站的反爬机制需要在爬虫设计中增加适当的延时与随机性,这样的话更加逼真。

作业③:

要求:完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务

3.1过程

1.Python脚本生成测试数据

image-20241114011721643

2.配置Kafka

3.安装Flume客户端

4.MySQL中准备结果表与维度表数据

5.使用DLI中的Flink作业进行数据分析

直接全产业链打通!!!

3.2 作业心得

  • 为我国之后实现信创国产化,使用国产设备打下了坚实的基础。

  • 深入理解了Kafka作为消息队列的配置和使用,学习了如何将数据从Flume传输到Kafka。

  • 安装并配置Flume客户端进行数据采集,学习了数据采集的基本流程和配置技巧。

  • 将数据从Kafka传输到MySQL数据库,完整体验了从数据源到消息传输,再到数据存储的实时数据处理流程。

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

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

相关文章

用python或使用Linux终端中的awk命令,处理文件并提取其中的IP地址(文末有代码,可直接使用)

题目:我有一个日志文件如图所示,我要取出文件中所有的IP地址,以方便我将其加入到防火墙的黑名单中 代码中所用到的正则表达式介绍: python使用的正则表达式是:对该正则表达式的解释:\b(?:\d{1,3}\.){3}\d{1,3}\b\b:单词边界。确保IP地址前后不与其他字符连接。 (?:\…

第七次高级语言程序设计作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/ 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400110 姓名:阿卜杜拉阿布力克木 1没有问题 2难度有点大,网上搜了之后看了好久才看懂 3也是看了好久才看懂 45没…

从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019

从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019安装内容 数据库版本:SQL Server 2019 企业版 操作系统:CentOS 7.9 配置如下图:安装环境准备 本文演示的Linux发行版是CentOS 7.9。接下来是SQL Server 2019的部署细节,包括安装源的配置、安装SQL Serve…

2024.11.13 Gusare 编程日志

2024.11.13 Gusare 编程日志前言 摆了好多天,没写日志,嘻嘻 最近一直在按顺序刷luogu的题单,刷完了【入门3循环】【入门4数组】【算法1-6 二分】【数据结构1-1 线性表】 看着很多,实际都是手速题,博主是大水比 有个叫许根瑞的家伙和我打赌2024前要是我没上蓝我就得请他吃甜…

如何在微信小程序中使用less开发

VScode的Esay-less插件第一步:直接先在 vscode 安装 easy-less 插件 第二步:点击微信开发者工具的扩展按钮,再点击扩展下的三个小点,选择从已解包的扩展文件夹安装第三步:选择这个less文件夹第四步:设置输出.wxss到这里还差最后一步,因为Easy-less,默认输出的css,但是…

WLAN学习-11.13

来源:1.无线网络发展历程2.WLAN频段类比人:迈的步子大,频率小;迈的步子小,频率大。 迈的步子大,穿墙能力强,适合应用在更加复杂的环境中,用2.4连信号会更好802.11协议介绍

iman——冲刺日志(第一天)

团队成员分工与进度组别 成员 完成的任务 完成任务所用时间 (小时) 剩余时间 (小时)前端 阿依娜孜 完成了“行程总览”页面的设计与制作,实现了页面的基本布局和功能框架。 5 4前端 郭剑敏 完成了“账单管理”页面的设计与开发,包括添加账单记录的功能和行李清单页面的基本框…

关于北航程设考试题目的一点研究

评价 没想到北航程设题竟然这么有实力,难怪会作弊 一种可能是对的做法 不难想到一个贪心,每次都作弊,直到不能作弊时,就停止作弊 然后接下来想到直接二分作弊次数,然后剩下的时间都不作弊,判断就看最终警觉值会不会\(<L\) 仔细一想,因为警觉值应该不能为负数,所以有…

免费云服务器推荐——阿贝云

阿贝云的免费虚拟主机和免费云服务器为我提供了稳定的性能和简便的操作体验,适合个人和小型网站使用。虽然免费资源有限,但其服务质量和性能让我非常满意。强烈推荐给有需求的朋友!访问阿贝云官网申请吧!

golang接收alertmanager的告警并发送钉钉

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.配置钉钉 1.钉钉自定义机器人接入参考文档参考链接:https://open.dingtalk.com/document/orgapp/custom-robot-access2.配置钉钉机器人如上图所示,注册钉钉拉群聊,然后添加“自定义机器人”,并配置自定…

python第八章课后习题

8.4 求微分方程组的数值解 x=-x3-y,x(0)=1,y=x-y3,y(0)=0.5,0<=t<=30,要求画出x(t)和y(t)的解曲线图形,再相平面上画出轨线点击查看代码 import matplotlib.pyplot as plt from scipy.integrate import solve_ivpdef system(t, state):x, y = statedxdt = -x**3 - …