第五次作业
一、作业内容
-
作业①:
-
要求:
- 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。
- 使用Selenium框架爬取京东商城某类商品信息及图片。
-
候选网站:http://www.jd.com/
-
关键词:学生自由选择
-
输出信息:MYSQL的输出信息如下
mNo mMark mPrice mNote mFile 000001 三星Galaxy 9199.00 三星Galaxy Note20 Ultra 5G... 000001.jpg 000002......
1、代码复现
(1)爬取数据
lis=self.driver.find_elements_by_xpath("//div[@id=\'J_goodsList\']//li[@class=\'gl-item\']") for li in lis: # We find that the image is either in src or in data-lazy-img attribute try: src1 = li.find_element_by_xpath(".//div[@class=\'p-img\']//a//img").get_attribute("src") except: src1 = "" try: src2 = li.find_element_by_xpath(".//div[@class=\'p-img\']//a//img").get_attribute("data-lazy-img") except: src2 = "" try: price = li.find_element_by_xpath(".//div[@class=\'p-price\']//i").text except: price = "0" try: note = li.find_element_by_xpath(".//div[@class=\'p-name p-name-type-2\']//em").text mark = note.split(" ")[0] mark = mark.replace("爱心东东\n", "") mark = mark.replace(",", "") note = note.replace("爱心东东\n", "") note = note.replace(",", "")(2)下载图片
if src1: src1 = urllib.request.urljoin(self.driver.current_url, src1) p = src1.rfind(".") mFile = no + src1[p:] elif src2: src2 = urllib.request.urljoin(self.driver.current_url, src2) p = src2.rfind(".") mFile = no + src2[p:] if src1 or src2: T = threading.Thread(target=self.download, args=(src1, src2, mFile)) T.setDaemon(False) T.start() self.threads.append(T) else: mFile = ""#调用download def download(self, src1, src2, mFile): data = None if src1: try: req = urllib.request.Request(src1, headers=MySpider.headers) resp = urllib.request.urlopen(req, timeout=10) data = resp.read() except: pass if not data and src2: try: req = urllib.request.Request(src2, headers=MySpider.headers) resp = urllib.request.urlopen(req, timeout=10) data = resp.read() except: pass if data: print("download begin", mFile) fobj = open(MySpider.imagePath + "\\" + mFile, "wb") fobj.write(data) fobj.close() print("download finish", mFile)(3)翻页处理
try: self.driver.find_element_by_xpath("//span[@class=\'p-num\']//a[@class=\'pn-next disabled\']") except: nextPage = self.driver.find_element_by_xpath("//span[@class=\'p-num\']//a[@class=\'pn-next\']") time.sleep(10) nextPage.click() self.processSpider()(4)存储到数据库
def insertDB(self, mNo, mMark, mPrice, mNote, mFile): try: sql = "insert into phone (mNo,mMark,mPrice,mNote,mFile) values (?,?,?,?,?)" self.cursor.execute(sql, (mNo, mMark, mPrice, mNote, mFile)) except Exception as err: print(err)2、结果展示
(1)控制台输出
(2)数据库信息
(3)图片保存到本地
3、心得体会
(1)更好地掌握模拟登录和输入关键词的数据爬取
4、码云链接
-
-
作业②:
-
要求:
- 熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
- 使用Selenium框架+MySQL模拟登录慕课网,并获取学生自己账户中已学课程的信息保存到MySQL中(课程号、课程名称、授课单位、教学进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹中,图片的名称用课程名来存储。
-
候选网站:中国mooc网:https://www.icourse163.org
-
输出信息:MYSQL数据库存储和输出格式
表头应是英文命名例如:课程号ID,课程名称:cCourse……,由同学们自行定义设计表头:
Id cCourse cCollege cSchedule cCourseStatus cImgUrl 1 Python网络爬虫与信息提取 北京理工大学 已学3/18课时 2021年5月18日已结束 http://edu-image.nosdn.127.net/C0AB6FA791150F0DFC0946B9A01C8CB2.jpg 2......
1、模拟登录
通过查看,获得“登录”的Xpath,模拟点击,实现登录
page_next = browser.find_element_by_xpath(\'//*[@id="g-container"]/div[1]/div/div/div/div[7]/div[2]\') page_next.click()2、爬取数据
(1)定位信息所在整体框架
lis = browser.find_elements_by_xpath(\'//*[@id="j-coursewrap"]/div/div[1]/div\')(2)定位课程名
name = browser.find_elements_by_xpath(\'.//div[1]/a/div[2]/div[1]/div[1]/div/span[2]\')[i].text(3)定位学校名称
college = browser.find_elements_by_xpath(\'.//div[1]/a/div[2]/div[1]/div[2]/a\')[i].text(4)定位学时
schedule = browser.find_elements_by_xpath(\'.//div[1]/a/div[2]/div[2]/div[1]/div[1]/div[1]/a/span\')[i].text(5)定位课程状态
status = browser.find_elements_by_xpath(\'.//div[1]/a/div[2]/div[2]/div[2]\')[i].text(6)定位图片链接
imgurl = browser.find_elements_by_xpath(\'.//div[1]/a/div[1]/img\')[i].get_attribute(\'src\')3、保存图片到本地
def download(self,imgurl, Filename): urllib.request.urlretrieve(imgurl,filename=MySpider.imagePath+\'/\'+Filename+\'.jpg\')4、存储到数据库
def insertDB(self,id,Course,College,Schedule,CourseStatus,ImgUrl): try: sql = "insert into course (id,cCourse,cCollege,cSchedule,cCourseStatus,cImgUrl) values (?,?,?,?,?,?)" self.cursor.execute(sql, (id,Course,College,Schedule,CourseStatus,ImgUrl)) except Exception as err: print(err)5、结果展示
(1)控制台输出
(2)数据库信息
(3)图片保存到本地
6、心得体会
(1)更好地掌握模拟登录的数据爬取
(2)熟练地掌握利用Xpath爬取所需数据
7、码云链接
-
-
作业③:Flume日志采集实验
-
要求
:掌握大数据相关服务,熟悉Xshell的使用
- 完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
- 环境搭建
- 任务一:开通MapReduce服务
- 实时分析开发实战
- 任务一:Python脚本生成测试数据
- 任务二:配置Kafka
- 任务三:安装Flume客户端
- 任务四:配置Flume采集数据
-
-
环境搭建
-
任务一:开通MapReduce服务
-
-
实时分析开发实战
-
任务一:Python脚本生成测试数据
1、创建目录
2、测试执行
3、查看数据
-
任务二:配置Kafka
1、设置环境变量
2、在kafka中创建topic
3、查看topic信息
-
任务三:安装Flume客户端
1、打开flume服务界面
2、点击下载客户端
3、解压下载的flume客户端文件
4、校验文件包
5、解压文件
6、安装Flume环境变量
7、解压Flume客户端
8、安装Flume客户端
9、重启Flume服务
-
任务四:配置Flume采集数据
1、修改配置文件
2、创建消费者消费kafka中的数据
-