作业1

1)

1、实验题目

  • 要求:

    • 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。
    • 使用Selenium框架爬取京东商城某类商品信息及图片。
  • 候选网站:http://www.jd.com/

  • 关键词:学生自由选择

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

    mNomMarkmPricemNotemFile
    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……,由同学们自行定义设计表头:


        IdcCoursecCollegecSchedulecCourseStatuscImgUrl
        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采集数据的相关知识

posted on 2021-12-07 20:11  __NOMAD  阅读(12)  评论(0编辑  收藏  举报