作业①
要求:
熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内
容。
使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、
“深证 A 股”3 个板块的股票数据信息。
候选网站:东方财富网http://quote.eastmoney.com/center/gridlist.html#hs_a_board
输出信息:MYSQL 数据库存储和输出格式如下,表头应是英文命名例如:序号
id,股票代码:bStockNo……,由同学们自行定义设计表头:
Gitee 文件夹链接为:https://gitee.com/tiantianmi/crawl_project/blob/master/作业4/stock.py
实验代码:
点击查看代码
import sqlite3
import options as options
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
# options.add_argument('--headless')
# options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
url = 'http://quote.eastmoney.com/center/gridlist.html#hs_a_board'
driver.get(url)
conn = sqlite3.connect('work4.db')
cursor = conn.cursor()
#删除已有表
cursor.execute("DROP TABLE IF EXISTS stock3")
cursor.execute('''CREATE TABLE IF NOT EXISTS stock3
(serial_no INTEGER, code TEXT, name TEXT, latest_price REAL,
change_percent REAL, change_amount REAL, volume INTEGER, amount REAL,
amplitude REAL, highest REAL, lowest REAL, today_open REAL, yesterday_close REAL)''')
# page = driver.find_elements(By.XPATH, '//span[@class="paginate_page"]//a')
def spider(driver):
driver.get(url=url)
getdata(driver)
for i in range(2, 4):
button = driver.find_element(By.XPATH, '//div[@id="tab"]/ul/li[' + str(i) + ']')
print("翻页")
button.click()
time.sleep(1.5)
getdata(driver)
# name = driver.find_elements(By.XPATH, '//tbody/tr/td[3]')
# for i in range(len(name)):
# print(name[i].text)
def getdata(driver):
try:
number = driver.find_elements(By.XPATH, '//tbody/tr/td[1]')
code = driver.find_elements(By.XPATH, '//tbody/tr/td[2]')
name = driver.find_elements(By.XPATH, '//tbody/tr/td[3]')
latest_price = driver.find_elements(By.XPATH, '//tbody/tr/td[5]')
change_percent = driver.find_elements(By.XPATH, '//tbody/tr/td[6]')
change_amount = driver.find_elements(By.XPATH, '//tbody/tr/td[7]')
volume = driver.find_elements(By.XPATH, '//tbody/tr/td[8]')
amount = driver.find_elements(By.XPATH, '//tbody/tr/td[9]')
amplitude = driver.find_elements(By.XPATH, '//tbody/tr/td[10]')
highest = driver.find_elements(By.XPATH, '//tbody/tr/td[11]')
lowest = driver.find_elements(By.XPATH, '//tbody/tr/td[12]')
today_open = driver.find_elements(By.XPATH, '//tbody/tr/td[13]')
yesterday_close = driver.find_elements(By.XPATH, '//tbody/tr/td[14]')
for i in range(len(name)):
d = (number[i].text, code[i].text, name[i].text, latest_price[i].text, change_percent[i].text,
change_amount[i].text, volume[i].text, amount[i].text, amplitude[i].text, highest[i].text,
lowest[i].text, today_open[i].text, yesterday_close[i].text)
cursor.execute("INSERT INTO stock3 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", d)
conn.commit()
print("存储成功")
except Exception as err:
print(err)
spider(driver)
driver.close()
运行结果:
“沪深 A 股”:
“上证 A 股”:
“深证 A 股”:
心得体会:
本次实验大体上和之前相似,不同的是加入了不同板块的读取,可以选择click来进行选择翻页进行不同板块的爬取。对数据库的存储和数据的爬取更加顺利了。比之前的代码增加了如果存在表就进行删除,防止每一次运行数据库就会加入一次数据。
实验二
实验内容
要求:熟练掌握Selenium查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)候选网站:中国 mooc 网:https://www.icourse163.org
**输出信息: **MYSQL 数据库存储和输出格式
Gitee文件夹链接:
https://gitee.com/tiantianmi/crawl_project/blob/master/作业4/mooc.py
代码实现:
点击查看代码
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import random
import sqlite3
# 声明一个谷歌驱动器,并设置不加载图片,间接加快访问速度
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
browser = webdriver.Chrome(options=options)
url = "https://www.icourse163.org"
# 声明一个list,存储dict
data_list = []
conn = sqlite3.connect('work4.db')
cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS mooc")
cursor.execute('''
CREATE TABLE IF NOT EXISTS mooc (
cCourse TEXT,
cCollege TEXT,
cTeacher TEXT,
cTeam TEXT,
cCount TEXT,
cProcess TEXT,
cBrief TEXT
)
''')
def start_spider():
# 请求url
browser.get(url)
# 显示等待商品信息加载完成
time.sleep(2)
# 手机号登录
print("登陆中")
browser.switch_to.frame(browser.find_element(By.XPATH,"//div[@class='ux-login-set-container']//iframe"))
time.sleep(2)
browser.switch_to.frame(browser.find_element(By.XPATH, "//div[@class='ux-login-set-container']//iframe"))
browser.find_element(By.XPATH, "//input[@class='dlemail j-nameforslide']").send_keys("13323768117") # 输入账号
browser.find_element(By.XPATH, '//input[@placeholder="请输入密码"]').send_keys("Aa1234567") # 输入密码
print("登录")
browser.find_element(By.XPATH, ".//div[@class='u-baseinputui']/input[@type='text']").send_keys(
"python") # 输入要找的课程
print("搜索")
browser.find_element(By.XPATH,
'//div[@class="u-search-icon"]/span[@class="u-icon-search2 j-searchBtn"]').click() # 点击搜索
time.sleep(2)
print(1)
datalist = browser.find_elements(By.XPATH, "//div[@class='cnt f-pr']")
time.sleep(2)
for data in datalist:
try:
# 获取各项数据
cCource = data.find_element(By.XPATH, "./div[@class='t1 f-f0 f-cb first-row']").text
cCollege = data.find_element(By.XPATH, ".//a[@class='t21 f-fc9']").text
cTeacher = data.find_element(By.XPATH, ".//a[@class='f-fc9']").text
cTeam = data.find_element(By.XPATH, ".//a[@class='f-fc9']").text
cCount = data.find_element(By.XPATH, ".//span[@class='hot']").text
cProcess = data.find_element(By.XPATH, ".//span[@class='txt']").text
cBrief = data.find_element(By.XPATH, ".//span[@class='p5 brief f-ib f-f0 f-cb']").text
# 将数据插入到MySQL数据库中
cursor.execute(
"INSERT INTO mooc VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
(cCource, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief)
)
conn.commit()
except Exception as err:
print(err)
def main():
start_spider()
if __name__ == '__main__':
main()
# 退出浏览器
browser.quit()
运行结果:
心得体会:
本次实验主要卡住我的点是要进行模拟用户登录,易错的地方是iframe的部分,首先要确认登录页面是否已经切换到了正确的 iframe 中,还有当页面进行切换的时候需要等待,否则就爬取不到数据等等。对数据的爬取,数据的查看更加顺手了。
作业③:
要求:
掌握大数据相关服务,熟悉Xshell的使用
完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
环境搭建
任务一:开通MapReduce服务
实时分析开发实战:
任务一:Python脚本生成测试数据
任务二:配置Kafka
任务三:安装Flume客户端
任务四:配置Flume采集数据
输出:实验关键步骤或结果截图。
结果截图:
任务一:开通MapReduce服务
任务一:Python脚本生成测试数据
任务二:配置Kafka
任务三:安装Flume客户端
任务四:配置Flume采集数据
心得体会
对着word一步步做,对Xshell和Xftp有了一些粗略的了解,虽然一开始很陌生,但慢慢的也做完了。就是华为云每次都需要释放,要一次性做完真的很难受。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了