代码放在码云:仓库链接
第三次作业
-
作业1:
-
要求:熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。
作业一代码文件夹:作业一
- 下面是代码文件
from selenium import webdriver
from selenium.webdriver.common.by import By
from sqlalchemy import create_engine
import pandas as pd
import pymysql
url = "http://quote.eastmoney.com/center/gridlist.html#hs_a_board"
driver = webdriver.Chrome()
driver.get(url)
#获取股票序号
num_list_new = []
num_list = driver.find_elements(by=By.XPATH,value="//*[@id='table_wrapper-table']/tbody/tr/td[2]/a")
for num in num_list:
num_list_new.append(num.text)
# for num in num_list:
# print(num.text)
# //*[@id="table_wrapper-table"]/tbody/tr[2]/td[1]
# //*[@id="table_wrapper-table"]/tbody/tr[3]/td[1]
#获取股票名称
name_list_new = []
name_list = driver.find_elements(by=By.XPATH,value="//*[@id='table_wrapper-table']/tbody/tr/td[3]/a")
for name in name_list:
name_list_new.append(name.text)
#获取最新报价
new_price_list_new=[]
new_price_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[5]/span')
for price in new_price_list:
new_price_list_new.append(price.text)
#获取涨跌幅
chg_list_new=[]
chg_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[6]/span')
for chg in chg_list:
chg_list_new.append(chg.text)
#获取涨跌额
Up_and_down_amount_list_new = []
Up_and_down_amount_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[7]/span')
for item in Up_and_down_amount_list:
Up_and_down_amount_list_new.append(item.text)
#获取成交量
turnover_list_new = []
turnover_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[8]')
for turnover in turnover_list:
turnover_list_new.append(turnover.text)
#获取成交额
transaction_volume_list_new = []
transaction_volume_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[9]')
for transaction in transaction_volume_list:
transaction_volume_list_new.append(transaction.text)
#获取振幅
amplitude_list_new = []
amplitude_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[10]')
for am in amplitude_list:
amplitude_list_new.append(am.text)
#获取最高
top_list_new = []
top_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[11]/span')
for top in top_list:
top_list_new.append(top.text)
#获取最低
low_list_new = []
low_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[12]/span')
for low in low_list:
low_list_new.append(low.text)
#获取今开
today_list_new = []
today_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[13]/span')
for to in today_list:
today_list_new.append(to.text)
#获取昨收
yesterday_list_new = []
yesterday_list = driver.find_elements(by=By.XPATH,value='//*[@id="table_wrapper-table"]/tbody/tr/td[14]')
for y in yesterday_list:
yesterday_list_new.append(y.text)
df = pd.DataFrame(columns=['股票序号','股票名称','最新报价','涨跌幅','涨跌额','成交量','成交额','振幅','最高','最低','今开','昨收'])
df['股票序号'] = num_list_new
df['股票名称'] = name_list_new
df['最新报价'] = new_price_list_new
df['涨跌幅'] = chg_list_new
df['涨跌额'] = Up_and_down_amount_list_new
df['成交量'] = turnover_list_new
df['成交额'] = transaction_volume_list_new
df['振幅'] = amplitude_list_new
df['最高'] = top_list_new
df['最低'] = low_list_new
df['今开'] = today_list_new
df['昨收'] = yesterday_list_new
df.set_index('股票序号')
print(df)
engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/homework1")
df.to_sql("stock01",engine,if_exists="replace",index=False)
-
下面是运行代码的截图



-
下图是保存下来的数据存储到数据库中,采用Navicat可视化



-
心得体会:
再上一次的实验中,利用scrapy自带的pipeline进行数据存储,配置项与类很多,这次采用selenium,这个框架上手就非常的快,直接可以利用我们特别熟悉的xpath进行搜索动态页面,就不再需要抓包。通过这个实验,对selenium的理解也深化了许多。
-
作业二:
-
要求:熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
-
候选网站:中国mooc网
作业二代码文件夹:作业二
- 下面是文件代码
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from scrapy.selector import Selector
import time
from sqlalchemy import create_engine
driver = webdriver.Chrome()
url = 'https://www.icourse163.org/'
driver.get(url)
time.sleep(3)
# 登录
register=driver.find_element(By.XPATH,'//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div')
register.click()
time.sleep(3)
time.sleep(3)
driver.switch_to.frame(driver.find_element(By.XPATH,'/html/body/div[13]/div[2]/div/div/div/div/div/div[1]/div/div[1]/div[2]/div[2]/div[1]/div/iframe'))
time.sleep(3)
telephone=driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[2]/form/div/div[2]/div[2]/input')
telephone.clear()
telephone.send_keys("18250454576")
time.sleep(5)
password=driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[2]/form/div/div[4]/div[2]/input[2]')
password.clear()
password.send_keys("czy021122")
deng=driver.find_element(By.XPATH,'//*[@id="submitBtn"]')
deng.click()
time.sleep(5)
driver.switch_to.default_content()
select_course=driver.find_element(By.XPATH,'/html/body/div[4]/div[1]/div/div/div/div/div[7]/div[1]/div/div/div[1]/div/div/div/div/div/div/input')
select_course.send_keys("python")
clicker=driver.find_element(By.XPATH,'//html/body/div[4]/div[1]/div/div/div/div/div[7]/div[1]/div/div/div[2]/span')
clicker.click()
time.sleep(3)
selector = Selector(text=content)
rows = selector.xpath("//div[@class='m-course-list']/div/div")
data = []
# 遍历每个<tr>元素
for r in rows:
lis = []
c= r.xpath(".//span[@class=' u-course-name f-thide']//text()").extract()
c_string="".join(c)
s=r.xpath(".//a[@class='t21 f-fc9']/text()").extract_first()
t=r.xpath(".//a[@class='f-fc9']//text()").extract_first()
team = r.xpath(".//a[@class='f-fc9']//text()").extract()
team_string=",".join(team)
number = r.xpath(".//span[@class='hot']/text()").extract_first()
time_new = r.xpath(".//span[@class='txt']/text()").extract_first()
brief=r.xpath(".//span[@class='p5 brief f-ib f-f0 f-cb']//text()").extract()
brief_string=",".join(brief)
lis.append(c_string)
lis.append(s)
lis.append(t)
lis.append(team_string)
lis.append(number)
lis.append(time_new)
lis.append(brief_string)
data.append(lis)
df = pd.DataFrame(data=data, columns=['course','school','teacher','team','number','time','brief'])
print(df)
engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/homework1")
df.to_sql('mooc',engine,if_exists="replace")



-
查看MySQL数据库,利用Navicat可视化软件查看

-
心得体会:
这个实验的登录界面是有一个弹窗,跳转到一个iframe中进行锁定。所以需要switch_to.frame()进行转换窗口,这里原先,我才用tag_name进行锁定,但是尝试了几次之后,发现还是没办法找到元素。于是我将find_element换成xpath进行搜索,这个时候终于可以锁定frame。剩下的和实验一就是一摸一样的了。这个实验困难之处就是一个转换窗口的函数与使用。
-
作业三:
-
要求:掌握大数据相关服务,熟悉Xshell的使用完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
-
环境搭建:
-
任务一:开通MapReduce服务
-
实时分析开发实战:
-
任务一:Python脚本生成测试数据
-
任务二:配置Kafka
-
任务三: 安装Flume客户端
-
任务四:配置Flume采集数据
作业三代码文件夹:作业三
-
配置好集群后如下

-
登录成功界面

-
利用xshell进行进行连接公网ip

-
任务一:Python脚本生成测试数据
-
将py文件上传到/opt/client目录下


-
运行py文件,查看测试数据

-
任务二:配置Kafka
-
使环境变量生效

-
查找自己zookeeper的ip

-
创建topic

-
查看topic信息

-
任务三:安装Flume客户端
-
下载客户端

-
客户端的主机和路径

-
到压缩包目录并解压

-
校验文件包

-
解压“MRS_Flume_ClientConfig.tar”文件

-
安装Flume环境变量

-
解压客户端

-
安装客户端

-
重启客户端

-
任务四:配置Flume采集数据
-
本地配置properties.properties文件,并上传该文件


-
在新开一个Xshell 7窗口(右键相应会话-->在右选项卡组中打开),执行2.2.1步骤三的Python脚本命令,再生成一份数据,查看Kafka中是否有数据产生,可以看到,已经消费出数据了:



-
心得体会