学不会啊

数据采集 实验五

作业①

1.1作业内容

作业①: 要求: 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。

使用Selenium框架爬取京东商城某类商品信息及图片。

候选网站:http://www.jd.com/

关键词:学生自由选择

输出信息:MYSQL的输出信息如下

1.2解题过程

1.2.1网页的获取

先进入京东主页面,通过搜索框输入查找的关键词,然后店家查找:

搜索输入框的获取:

查找id="key"的input组件即可。

查找按钮:

id=“search"的标签下的第一个div标签下的第二个div标签下的button。

代码部分:

driver.get(url)  # 访问首页
inputit = driver.find_element_by_xpath('//*[@id="key"]')
inputit.send_keys(keyWord)
findbutton = driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
findbutton.click()
1.2.2目标数据的获取

可以看到商品数据都 存在一个class="gl-warp clearfix"的div标签下的列表中。

所以先获取商品列表:

shoplist = driver.find_element_by_xpath('//*[@class="gl-warp clearfix"]')

然后是对应内容的查找,以价格为例:

可以看到价格信息存在商品列表下的class=”p-price"的div标签下的/strong/i路径下的文本内,所以查找:

price = shoplist.find_elements_by_xpath('.//div[@class="p-price"]/strong/i')
1.2.3翻页和下拉

翻页处理就是找到下一页的按钮:

class=“pn-next”的a标签。点击即可。

def loadNext():                 #用于转到下一页
    time.sleep(1)
    try:
        NextPage = driver.find_element_by_xpath('//a[@class="pn-next"]')
        NextPage.click()
    except:
        print("最后一页")

京东的网页下拉到底会加载出下一页的内容,一页的内容是30个商品,下拉到底加载出全部60个商品,如果不下拉可能会有数据(如图片)未加载出来,而出现null的情况。

def loadAll():
    for i in range(100):                     #没有下拉到底,差不多全部加载完成就行
        js = 'window.scrollTo(0,%s)' % (i * 100)                #js脚本
        driver.execute_script(js)                       #提交js脚本
        time.sleep(0.07)

每拉一点停一下,以确保数据全部加载。

1.3输出

保存的图片:

数据库:

1.4心得体会

selenium的基本使用,网页内容查找,输入,点击等事件。

selenium提交js脚本的使用

作业②

2.1作业内容

要求: 熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待 HTML元素等内容。 使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、教学 进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹 中,图片的名称用课程名来存储。

候选网站:中国mooc网:https://www.icourse163.org

输出信息:MYSQL数据库存储和输出格式

2.2解题过程

2.2.1模拟登录的实现

首先找到输入账号密码的窗口

点击右上方的登录|注册可以弹出登录窗口,直接通过点击Copy Xpath获取的地址是

//*[@id="auto-id-1637751328911"]

通过的是id来查找,但是这里的id每次进入这个网页的时候都会发生变化,所以无法通过id来查找,

所以通过class-"unlogin"标签来查找。

同样问题也适用在这个网站的其他内容的查找中,

在显示了上面这个输入手机号和密码的输入框之后,无法找到输入的组件

这是因为网页加载了一个新的frame:

此时需要切换到这个新的:

frame = driver.find_element_by_xpath('//div[@class="ux-login-set-container"]/iframe')
driver.switch_to.frame(frame)

然后才能继续执行

然后查找输入账号密码点击登录:

账号密码的输入框都放在class="u-input box"的标签下,可以通过这个来查找:

登录按钮id="submitBtn"可以直接查找不会变化。

inputUserName =driver.find_element_by_xpath('//div[@class="u-input box"][1]/input')
inputUserName.send_keys("")
inputPasswd = driver.find_element_by_xpath('//div[@class="inputbox"]/div[2]/input[2]')
inputPasswd.send_keys("")
LoginButton = driver.find_element_by_xpath('//*[@id="submitBtn"]')
LoginButton.click()
2.2.2数据的获取

登录之后页面变为登录后的页面:

通过webdriver执行的会出现:

右下角的窗口会遮挡住我的课程按钮,使按钮无法点击:

此时需要关闭这个窗口:

agree=driver.find_element_by_xpath('//button[@class="btn ok"]')
agree.click()

然后才可以进入我的课程页面:

可以看到需要的信息都存在class="course-panel-body-wrapper"下的div标签中然后

course = driver.find_element_by_xpath('.//div[@class="course-panel-body-wrapper"]')
names = course.find_elements_by_xpath('.//span[@class="text"]')
schools= course.find_elements_by_xpath('.//div[@class="school"]')
courset = course.find_elements_by_xpath('.//span[@class="course-progress-text-span"]')
time = course.find_elements_by_xpath('.//div[@class="course-status"]')
hrefs = course.find_elements_by_xpath('.//div[@class="img"]/img')

2.3输出

mysql里数据

2.4心得体会

selenium实现模拟登录,窗口(frame)的转换。

selenium等待机制。

作业③:

要求:
理解Flume架构和关键特性,掌握使用Flume完成日志采集任务。
完成Flume日志采集实验,包含以下步骤:

任务一:开通MapReduce服务

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

连接服务器

输出:

任务三:配置Kafka

查看zookeeper ip:

配置完成

任务四:安装Flume客户端

解压:

安装完成:

重启服务安装结束:

任务五:配置Flume采集数据

运行结果:

心得体会

了解并学习了Flume架构,学会了使用华为云平台,完成使用Flume日志采集任务。

第五次实验源代码

posted @ 2021-11-24 20:10  با  阅读(131)  评论(0编辑  收藏  举报