2023数据采集与融合技术作业四

发布时间 2023-11-12 21:24:20作者: 酱酱酱酱江

码云

作业①:

stock
o 要求:
▪ 熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内容。
▪ 使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块的股票数据信息。
o 候选网站:东方财富网:http://quote.eastmoney.com/center/gridlist.html#hs_a_board
o 输出信息:MYSQL 数据库存储和输出格式如下,表头应是英文命名例如:序号id,股票代码:bStockNo……,由同学们自行定义设计表头:
• Gitee 文件夹链接
o序号 股票代码 股票名称 最新报价 涨跌幅 涨跌额 成交量 成交额 振幅 最高 最低 今开 昨收
1 688093 N世华 28.4 7 62.22% 10.9 2 26.13 万 7.6亿 22.34 32.0 28.08 30.2 17.55
2......

实验

选取要爬的页数和板块

print("你想要爬取的页码:")
want_page = input()
print("你想要爬的板块")
want_bank = input()
browser = webdriver.Chrome()
url = 'http://quote.eastmoney.com/center/gridlist.html#hs_a_board'
browser.get(url)
time.sleep(2)
if want_bank == "上证A股":
    browser.find_element(By.XPATH, '//*[@id="nav_sh_a_board"]').click()
    time.sleep(3)
if want_bank == "深证A股":
    browser.find_element(By.XPATH, '//*[@id="nav_sz_a_board"]').click()
    time.sleep(3)

通过各种点击操作得到想要的content

# 滑倒底部
js_bottom = 'document.documentElement.scrollTop=1000000'
browser.execute_script(js_bottom)
time.sleep(2)

# 页面
page = browser.find_element(By.CLASS_NAME, 'paginate_input')
page.clear()
page.send_keys(want_page)
time.sleep(2)

# 确定
que_ding = browser.find_element(By.CLASS_NAME, 'paginte_go')
que_ding.click()
time.sleep(5)

content = browser.page_source
print(content)
# 退出
browser.quit()
selector = Selector(text=content)
rows = selector.xpath("//div[@id='table_wrapper']//tbody//tr")

解析content,建立数据库

data = []
# 遍历每个<tr>元素
for row in rows:
    lis = []
    f1 = row.xpath(".//td[1]//text()").extract_first()
    f2 = row.xpath(".//td[2]//text()").extract_first()
    f3 = row.xpath(".//td[3]//text()").extract_first()
    f4 = row.xpath(".//td[5]//text()").extract_first()
    f5 = row.xpath(".//td[6]//text()").extract_first()
    f6 = row.xpath(".//td[7]//text()").extract_first()
    f7 = row.xpath(".//td[8]//text()").extract_first()
    f8 = row.xpath(".//td[9]//text()").extract_first()
    f9 = row.xpath(".//td[10]//text()").extract_first()
    f10 = row.xpath(".//td[11]//text()").extract_first()
    f11 = row.xpath(".//td[12]//text()").extract_first()
    f12 = row.xpath(".//td[13]//text()").extract_first()
    f13 = row.xpath(".//td[14]//text()").extract_first()
    lis.append(f1)
    lis.append(f2)
    lis.append(f3)
    lis.append(f4)
    lis.append(f5)
    lis.append(f6)
    lis.append(f7)
    lis.append(f8)
    lis.append(f9)
    lis.append(f10)
    lis.append(f11)
    lis.append(f12)
    lis.append(f13)
    data.append(lis)
df = pd.DataFrame(data=data,
                  columns=['序号', '股票代码', '股票名称', '最新报价', '涨跌幅', '涨跌额', '成交量', '成交额',
                           '振幅', '最高', '最低', '今开', '昨收'])
print(df)
engine = create_engine("mysql+mysqlconnector://root:021022@127.0.0.1:3306/mybatis")
df.to_sql("sstock", engine, if_exists="replace", index=False)

心得体会

可以感受到selenium与scrapy的区别,可以动态查找页面

实验结果如下:

作业②:

MOOC
o 要求:
▪ 熟练掌握 Selenium 查找 HTML 元素、实现用户模拟登录、爬取 Ajax 网页数据、等待 HTML 元素等内容。
▪ 使用 Selenium 框架+MySQL 爬取中国 mooc 网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
o 候选网站:中国 mooc 网:https://www.icourse163.org
o 输出信息:MYSQL 数据库存储和输出格式
• Gitee 文件夹链接
o Id cCourse cCollege cTeacher cTeam cCount cProcess cBrief
1 Python数据分析与展示 北京理工大学 嵩天 嵩天 470 2020 年11 月 17日 ~ 2020 年12 月 29日 “我们正步入一个数据或许比软件更重要的新时代。—Tim O'Reilly” ……
2......

实验

登录

# 登录
denglu=browser.find_element(By.XPATH,'//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div')
denglu.click()
time.sleep(3)
browser.switch_to.default_content()
browser.switch_to.frame(browser.find_elements(By.TAG_NAME,'iframe')[0])


phone=browser.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[2]/form/div/div[2]/div[2]/input')
phone.clear()
phone.send_keys("18805952874")
time.sleep(3)
password=browser.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("021022jz.")
deng=browser.find_element(By.XPATH,'//*[@id="submitBtn"]')
deng.click()
time.sleep(5)
browser.switch_to.default_content()

点击查找获得content

select_course=browser.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")
dianji=browser.find_element(By.XPATH,'//html/body/div[4]/div[1]/div/div/div/div/div[7]/div[1]/div/div/div[2]/span')
dianji.click()
time.sleep(3)

content = browser.page_source
print(content)
# 退出
browser.quit()
selector = Selector(text=content)
rows = selector.xpath("//div[@class='m-course-list']/div/div")

解析content,建立数据库

data = []
# 遍历每个<tr>元素
for row in rows:
    lis = []
    course= row.xpath(".//span[@class=' u-course-name f-thide']//text()").extract()
    course_string="".join(course)
    school=row.xpath(".//a[@class='t21 f-fc9']/text()").extract_first()
    teacher=row.xpath(".//a[@class='f-fc9']//text()").extract_first()
    team = row.xpath(".//a[@class='f-fc9']//text()").extract()
    team_string=",".join(team)
    number = row.xpath(".//span[@class='hot']/text()").extract_first()
    time = row.xpath(".//span[@class='txt']/text()").extract_first()
    jianjie=row.xpath(".//span[@class='p5 brief f-ib f-f0 f-cb']//text()").extract()
    jianjie_string=",".join(jianjie)

    lis.append(course_string)
    lis.append(school)
    lis.append(teacher)
    lis.append(team_string)
    lis.append(number)
    lis.append(time)
    lis.append(jianjie_string)

    data.append(lis)
df = pd.DataFrame(data=data, columns=['course','school','teacher','team','number','time','jianjie'])
print(df)
engine = create_engine("mysql+mysqlconnector://root:021022@127.0.0.1:3306/mybatis")
df.to_sql("mooccourse", engine, if_exists="replace", index=False)

心得体会:

1.模拟登录的时候发现了一个很神奇的地方,为什么登录所需要点击的界面通过xpath查取不到

后来就翻页面源码,发现这个地方和其他地方有所不同的

所以我们要通过switch_to.frame进入frame框架页面才能爬取到里面的内容,最后要driver.switch_to.default_content()返回主页面

2.爬取课程名的时候,发现怎么爬都是空的,但是使用xpath插件又有内容,实在找不出原因就先把content 输出出来,发现course= row.xpath(".//span[@class=' u-course-name f-thide']//text()").extract() 的u前面有空格,上次有一次爬取淘宝也遇到这个问题,所以猜测是这个原因
3.像课程名和team爬取时有很多text(),如下:

我使用join把列表里面的所有值变成一个字符串存取

实验结果如下:

作业③:

o 要求:
• 掌握大数据相关服务,熟悉 Xshell 的使用
• 完成文档 华为云_大数据实时分析处理实验手册-Flume 日志采集实验(部分)v2.docx 中的任务,即为下面 5 个任务,具体操作见文档。
• 环境搭建:
·任务一:开通 MapReduce 服务
• 实时分析开发实战:

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



任务二:配置 Kafka

任务三: 安装 Flume 客户端






任务四:配置 Flume 采集数据



输出:实验关键步骤或结果截图。