数据采集第五次大作业

第五次作业

一、作业内容

  • 作业①:

    • 要求:

      • 熟练掌握 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)控制台输出

    实验1控制台输出

    (2)数据库信息

    实验1数据库

    (3)图片保存到本地

    实验1图片保存到本地

    3、心得体会

    (1)更好地掌握模拟登录和输入关键词的数据爬取

    4、码云链接

    作业5/JD.py · 黄伟婷/数据采集 - 码云 - 开源中国 (gitee.com)

  • 作业②:

    • 要求:

      • 熟练掌握 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、模拟登录

    image-20211129213302829

    通过查看,获得“登录”的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)定位信息所在整体框架

    image-20211129213912722

    lis = browser.find_elements_by_xpath('//*[@id="j-coursewrap"]/div/div[1]/div')
    
    (2)定位课程名

    image-20211129214209353

    name = browser.find_elements_by_xpath('.//div[1]/a/div[2]/div[1]/div[1]/div/span[2]')[i].text
    
    (3)定位学校名称

    image-20211129214619982

    college = browser.find_elements_by_xpath('.//div[1]/a/div[2]/div[1]/div[2]/a')[i].text
    
    (4)定位学时

    image-20211129214633610

    schedule = browser.find_elements_by_xpath('.//div[1]/a/div[2]/div[2]/div[1]/div[1]/div[1]/a/span')[i].text   
    
    (5)定位课程状态

    image-20211129214647253

    status = browser.find_elements_by_xpath('.//div[1]/a/div[2]/div[2]/div[2]')[i].text
    
    (6)定位图片链接

    image-20211129214659837

    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控制台输出

    (2)数据库信息

    实验2数据库

    (3)图片保存到本地

    实验2图片保存本地

    6、心得体会

    (1)更好地掌握模拟登录的数据爬取
    (2)熟练地掌握利用Xpath爬取所需数据

    7、码云链接

    作业5/Course.py · 黄伟婷/数据采集 - 码云 - 开源中国 (gitee.com)

  • 作业③:Flume日志采集实验

    • 要求

      :掌握大数据相关服务,熟悉Xshell的使用

      • 完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
      • 环境搭建
        • 任务一:开通MapReduce服务
      • 实时分析开发实战
        • 任务一:Python脚本生成测试数据
        • 任务二:配置Kafka
        • 任务三:安装Flume客户端
        • 任务四:配置Flume采集数据
  • 环境搭建

    • 任务一:开通MapReduce服务

      1-1配置环境

  • 实时分析开发实战

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

      1、创建目录

      2-2创建目录

      2、测试执行

      2-3测试执行

      3、查看数据

      2-3查看数据

    • 任务二:配置Kafka

      1、设置环境变量

      3-1设置环境变量

      2、在kafka中创建topic

      3-2创建topic

      3、查看topic信息

      3-3查看topic信息

    • 任务三:安装Flume客户端

      1、打开flume服务界面

      4-1打开flume服务界面

      2、点击下载客户端

      4-2点击下载客户端

      3、解压下载的flume客户端文件

      4-3解压压缩包

      4、校验文件包

      4-4校验文件包

      5、解压文件

      4-5解压文件

      6、安装Flume环境变量

      4-6安装客户端运行环境到新的目录

      4-6配置环境变量

      7、解压Flume客户端

      4-7解压Flume客户端

      8、安装Flume客户端

      4-8安装Flume客户端

      9、重启Flume服务

      4-9重启Flume服务

    • 任务四:配置Flume采集数据

      1、修改配置文件

      5-1编辑并传输文件properties

      2、创建消费者消费kafka中的数据

      5-2查看消费kafka数据

posted @ 2021-11-29 21:59  Brasing  阅读(23)  评论(0编辑  收藏  举报