数据采集与融合技术第五次实践

数据挖掘第五次实践

作业一

京东信息爬取实验

作业内容

  1. 要求:熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架爬取京东商城某类商品信息及图片。
  2. 候选网站:http://www.jd.com/
  3. 关键词:学生*选择

实践过程

将老师的Sqlite数据库改为sql server

    def startUp(self, url, key):
      # # Initializing Chrome browser
      chrome_options = Options()
      chrome_options.add_argument('--headless')
      chrome_options.add_argument('--disable-gpu')
      self.driver = webdriver.Chrome(chrome_options=chrome_options)

      # Initializing variables
      self.threads = []
      self.No = 0
      self.imgNo = 0
      # Initializing database
      try:
          self.con = pyodbc.connect(
              'DRIVER={SQL Server};SERVER=(local);DATABASE=test;UID=DESKTOP-FG7JKFI\捷;PWD=29986378;Trusted_Connection=yes')
          self.cursor = self.con.cursor()
          try:
              # 如果有表就删除
              self.cursor.execute("drop table phones")
          except:
              pass

          try:
              #  建立新的表
              sql = "create  table  phones  (mNo  char(32) primary key, mMark char(256),mPrice char(32),mNote char(1024),mFile char(256))"
              self.cursor.execute(sql)
          except:
              pass

      except Exception as err:
          print(err)

    def showDB(self):
        try:
            con = pyodbc.connect(
                'DRIVER={SQL Server};SERVER=(local);DATABASE=test;UID=DESKTOP-FG7JKFI\捷;PWD=29986378;Trusted_Connection=yes')
            cursor =con.cursor()
            print("%-8s%-16s%-8s%-16s%s"%("No", "Mark", "Price", "Image", "Note"))
            cursor.execute("select mNo,mMark,mPrice,mFile,mNote from phones  order by mNo")

            rows = cursor.fetchall()
            for row in rows:
                print("%-8s %-16s %-8s %-16s %s" % (row[0], row[1], row[2], row[3],row[4]))

            con.close()
        except Exception as err:
            print(err)

作业结果

作业一源代码

数据采集与融合技术第五次实践
数据采集与融合技术第五次实践

作业二

MOOC爬取实验

作业内容

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

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

实践过程

  1. 实现登录功能

    # 登录页面链接
    url = "https://www.icourse163.org/member/login.htm?returnUrl=aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcvaW5kZXguaHRt#/webLoginIndex"
    ua = UserAgent(path="D:\\program\\python\\CrawlLearning\\fake_useragent_0.1.11.json").random
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument("user-agent=" + ua)
    
    driver = webdriver.Chrome(chrome_options=chrome_options)
    driver.get(url)
    time.sleep(10)	# 留出时间扫码登录
    
  2. 页面信息定位

    以获取课程名称为例:

    数据采集与融合技术第五次实践

    def getInfo(driver,infos):
        """ 获取课程信息
    
              :param driver: 创建的webdriver
              :param infos: 用于存储信息的列表
              :return: 课程信息列表infos[[name,school,process,date,imgurl],]
              """
        trs = driver.find_elements_by_xpath('//div[@class="box"]')
        for tr in trs:
            name = tr.find_element_by_xpath("./a/div/div/div/div/span[@class='text']").text     # 课程名称
            school = tr.find_element_by_xpath("./a/div/div/div/a").text     # 学校
            process = tr.find_element_by_xpath('./a/div/div/div[@class="course-progress"]/div/div/a/span[@class="course-progress-text-span"]').text     # 学习进度
            date = tr.find_element_by_xpath('./a/div/div/div[@class="course-status"]').text     # 结束日期
            imgurl = tr.find_element_by_xpath('./a/div[@class="img"]/img').get_attribute("src")     # 封面地址
            print(name,school,process,date)
            infos.append([name,school,process,date,imgurl])
        return infos
    
  3. 数据存入数据库

    def savetoDB(infos):
        # 存储到数据库
        conn = pyodbc.connect(
            'DRIVER={SQL Server};SERVER=(local);DATABASE=test;UID=DESKTOP-FG7JKFI\捷;PWD=29986378;Trusted_Connection=yes')
        cur = conn.cursor()
        # 判断数据库中是否存在该表 若存在 则删除
        try:
            cur.execute("DROP TABLE classInfo")
        except:pass
        cur.execute('CREATE TABLE classInfo (Cname char(200),school char(200), Cschedule char(100),Cdate char(100),Cimg char(500))')
        # 数据写入
        for s in infos:
            sql = 'insert into classinfo([Cname],[school],[Cschedule],[Cdate],[Cimg]) values(?,?,?,?,?)'
            cur.execute(sql, (s[0], s[1],s[2],s[3],s[4]))
            print(s[1],"存储完成")
        conn.commit()
        conn.close()
    

作业结果

作业二源代码

数据采集与融合技术第五次实践

心得体会

本次实验实现了登录功能,有的信息必须在完成登录后才可以显示。登录时要注意sleep时间,登录页面跳转也需要一定的时间,不然可能会导致爬不出页面。

作业三

Flume实验

作业内容

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

    任务一:开通MapReduce服务

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

    任务三:配置Kafka

    任务四:安装Flume客户端

    任务五:配置Flume采集数据

实践过程

任务一:开通MapReduce服务

数据采集与融合技术第五次实践

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

数据采集与融合技术第五次实践

任务三:配置Kafka

数据采集与融合技术第五次实践

任务四:安装Flume客户端

数据采集与融合技术第五次实践

数据采集与融合技术第五次实践

任务五:配置Flume采集数据

捕获成功
数据采集与融合技术第五次实践

上一篇:Android的cursor的使用细节


下一篇:mybatis逆向工程【使用插件】