作业1
1)
1、实验题目
-
要求:
- 熟练掌握 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......
2、代码
2.1 建立数据库和表
try: self.con = sqlite3.connect("phones.db") self.cursor = self.con.cursor() try: # 如果有表就删除 self.cursor.execute("drop table phones") except: pass try: # 建立新的表 sql = "create table phones (mNo varchar(32) primary key,mMark varchar(256),mPrice varchar(32),mNote varchar(1024),mFile varchar(256))" self.cursor.execute(sql) except: pass
2.2 建立文件用于存放图片
imagePath = "download" try: if not os.path.exists(MySpider.imagePath): os.mkdir(MySpider.imagePath) images = os.listdir(MySpider.imagePath) for img in images: s = os.path.join(MySpider.imagePath, img) os.remove(s) except Exception as err: print(err)
2.3 利用xpath路径匹配所需数据
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.4 下载图片
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)
2.5 翻页操作
# 取下一页的数据 try: self.driver.find_element(By.XPATH, "//span[@class='p-num']//a[@class='pn-next disabled']") except: if self.No < 120: # 一页30张,爬取4页 nextPage = self.driver.find_element(By.XPATH, "//span[@class='p-num']//a[@class='pn-next']") time.sleep(10) nextPage.click() self.processSpider()
码云地址:https://gitee.com/No_mad/crawl_project/blob/master/%E5%AE%9E%E9%AA%8C%E4%BA%94%E4%BD%9C%E4%B8%9A1
3、结果
控制台输出结果
数据库结果
下载的图片
2)心得体会
这次作业虽然是代码复现,但是其中许多有用的知识让我受益匪浅,比如其下载图片的操作和xpath语句的使用,还有其selenium的使用也加深了我对selenium的理解
作业2
1)
1、实验题目
-
-
要求:
- 熟练掌握 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......
-
2、代码
2.1 建立数据库和表
try: self.con = sqlite3.connect("moocs.db") self.cursor = self.con.cursor() try: # 如果有表就删除 self.cursor.execute("drop table moocs") except: pass try: # 建立新的表 sql = "create table moocs (Id varchar(32) primary key,cCourse varchar(128),cCollege varchar(32),cSchedule varchar(64),cCourseStatus varchar(64),cImgUrl varchar(256))" self.cursor.execute(sql) except: pass except Exception as err: print(err)
2.2建立imgs文件夹存放图片
imagePath = "imgs" try: if not os.path.exists(MySpider.imagePath): os.mkdir(MySpider.imagePath) images = os.listdir(MySpider.imagePath) for img in images: s = os.path.join(MySpider.imagePath, img) os.remove(s) except Exception as err: print(err)
2.3 利用selenium实现自动化登录操作
self.driver = webdriver.Chrome() self.driver.get(url) self.driver.maximize_window() time.sleep(2) self.driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div').click() time.sleep(2) self.driver.find_element(By.XPATH, '//*[@class="zcnt"]/div/div/div/div/div[2]/span').click() self.driver.find_element(By.XPATH, '//*[@class="mooc-login-set"]/div/div/div[1]/div/div[1]/div[1]/ul/li[2]').click() time.sleep(1) # 切换至iframe定位元素 iframe = self.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/iframe') self.driver.switch_to.frame(iframe) idinput = self.driver.find_element(By.XPATH, '//*[@id="phoneipt"]') idinput.send_keys("15260176817") time.sleep(1) passwdinput = self.driver.find_element(By.XPATH, '//*[@class="j-inputtext dlemail"]') passwdinput.send_keys("******") time.sleep(1) self.driver.find_element(By.XPATH, '//*[@id="submitBtn"]').click() time.sleep(3) self.driver.find_element(By.XPATH, '//*[@id="privacy-ok"]').click() # 进入课程中心 self.driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[1]/div[3]/div[4]/div').click()
2.4 xpath语句匹配所需要的数据
lis = self.driver.find_elements(By.XPATH, '//*[@id="j-coursewrap"]/div/div[1]/div') for li in lis: cCourse = li.find_element(By.XPATH, ".//a//div/span[2]").text cCollege = li.find_element(By.XPATH, ".//a/div[2]/div[1]/div[2]/a").text cSchedule = li.find_element(By.XPATH, ".//div[1]/a/span").text cCourseStatus = li.find_element(By.XPATH, ".//a/div[2]/div[2]/div[2]").text cImgUrl = li.find_element(By.XPATH, ".//a//img").get_attribute("src") self.No = self.No + 1 # print(self.No) no = str(self.No) while len(no) < 2: no = "0" + no print(no, cCourse, cCollege, cSchedule, cCourseStatus, cImgUrl) if cImgUrl: src = urllib.request.urljoin(self.driver.current_url, cImgUrl) p = src.rfind(".") mFile = no + ".jpg" if src: T = threading.Thread(target=self.download, args=(src, mFile)) T.setDaemon(False) T.start() self.threads.append(T) else: mFile = ""
码云地址:https://gitee.com/No_mad/crawl_project/blob/master/%E5%AE%9E%E9%AA%8C%E4%BA%94%E4%BD%9C%E4%B8%9A2
3、结果
控制台结果
数据库结果
下载的图片
2)心得体会
掌握了使用selenium模拟登录账号的操作,熟悉了selenium爬取网站数据的使用
作业3
1)
1、实验题目
- 要求:掌握大数据相关服务,熟悉Xshell的使用
- 完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
- 环境搭建
- 任务一:开通MapReduce服务
- 实时分析开发实战:
-
- 任务二:Python脚本生成测试数据
- 任务三:配置Kafka
- 任务四:安装Flume客户端
- 任务五:配置Flume采集数据
-
2、
2.1任务一:开通MapReduce服务
2.2 任务二:Python脚本生成测试数据
2.3 任务三:配置Kafka
2.4任务四:安装Flume客户端
2.5任务五:配置Flume采集数据
2)心得体会
初步了解了华为云中flume采集数据的相关知识