数据采集第五次大作业
第五次大作业
作业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。