数据采集第五次大作业

第五次大作业

作业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......

1.2思路

1.2.1创建表以及selenium开始

​ 创建数据库用于存储爬取的数据以及存放图片的文件夹

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 = 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

                except Exception as err:
                    print(err)
                    # Initializing images folder
                    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)
                                    self.driver.get(url)
                                    keyInput = self.driver.find_element_by_id("key")
                                    keyInput.send_keys(key)
                                    keyInput.send_keys(Keys.ENTER)

1.2.2关闭数据库

 try:
	self.con.commit()
	self.con.close()
	self.driver.close()
except Exception as err:
    print(err)

1.2.3向表中插入数据

​ 因为存在三张表,所以使用flag来标注不同的表,向不同的表中插入数据。

try:
	sql = "insert into phones (mNo,mMark,mPrice,mNote,mFile) values (?,?,?,?,?)"
	self.cursor.execute(sql, (mNo, mMark, mPrice, mNote, mFile))
except Exception as err:
	print(err)

1.2.4实现翻页

这里只爬取了两页的信息,证明可以翻页

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()

1.2.5结果

数据库:

图片文件夹:

1.3完整代码

https://gitee.com/q_kj/crawl_project/blob/master/five/jingdong.py

作业2

2.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思路

2.2.1创建表

try:
    self.con = sqlite3.connect("course.db")
    self.cursor = self.con.cursor()
    try:
        self.cursor.execute("drop table courses")
    except:
		pass
	try:
		self.cursor.execute("create table courses(id varchar(16),cCourse varchar (64),cCollege varchar (64),cSchedule varchar (64),cCourseStatus varchar (64),cImgUrl varchar (128))")
	except:
		pass
except Exception as err:
	print(err)

2.2.2关闭数据库

try:
	self.con.commit()
	self.con.close()
	self.driver.close()
except Exception as err:
	print(err)

2.2.3向表中插入数据

try:
	sql = "insert into courses (id,cCourse,cCollege,cSchedule,cCourseStatus,cImgUrl) values (?,?,?,?,?,?)"
	self.cursor.execute(sql, (id,cCourse, cCollege, cSchedule, cCourseStatus,cImgUrl))
except Exception as err:
	print(err)

2.2.4下载文件

data = requests.get(url1)
if data:
    print("download begin")
    if not os.path.exists(mooc.imagePath):
        os.mkdir(mooc.imagePath)
	fobj = open(mooc.imagePath + "\\" + name +".jpg", "wb")
	fobj.write(data.content)
	fobj.close()
	print("download finish")

2.2.5各部分数据爬取

​ 首先登进网站

self.driver.get(url)
time.sleep(3)
download = self.driver.find_element(by=By.XPATH, value='//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div')
self.driver.execute_script("arguments[0].click();", download)
time.sleep(15)
personality = self.driver.find_element(by=By.XPATH, value='//div[@class="_3uWA6"]')
self.driver.execute_script("arguments[0].click();", personality)

​ 此时就进入了“我的课程”,进而分析结构爬取其中课程的信息。

​ 因为每个课程的信息都在div下,所以首先爬取所有存储课程信息的div,然后再分别找个各个信息。

divs = self.driver.find_elements(by=By.XPATH,value='//div[@class="course-card-wrapper"]')
for div in divs:
    self.count += 1
    try:
        cCourse = div.find_element(by=By.XPATH, value='.//span[@class="text"]').text
	except:
		cCourse = ""

2.2.6结果

数据库结果信息

图片文件夹:

2.3完整代码

https://gitee.com/q_kj/crawl_project/blob/master/five/mooc.py

作业3

3.1实验题目

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

3.2过程

环境搭建:任务一

结果:

实时分析开发实战:

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

任务二:配置Kafka

1.设置环境变量

2.在kafka中创建topic(注意更换为自己Zookeeper的ip,端口号一般不动)

3.查看topic信息

任务三:安装Flume客户端

1.下载flume客户端

2.解压下载的flume客户端文件

3.校验文件包

4.解压“MRS_Flume_ClientConfig.tar”文件

5.安装flume环境变量

6.解压flume客户端

7.安装flume客户端

8.重启flume服务

任务四:配置Flume采集数据

1.修改配置文件:

现在本地创建文件,在上传(忘了截图)

2.创建消费者消费Kafka中的数据

小结

第一题是原代码复现,没有什么问题;第二题则是在第一题的基础上编写,主要一开始在于网站登不上去,而且一开始使用urllib下载文件写入文件夹中出现错误,后来改成使用requests就一切正常了;第三题主要介绍了通过Flume来完成实时流数据的采集,初步了解了flume。

posted @ 2021-11-24 22:18  Q_Pumpkin  阅读(70)  评论(0编辑  收藏  举报