数据挖掘第五次实践
作业一
京东信息爬取实验
作业内容
- 要求:熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架爬取京东商城某类商品信息及图片。
- 候选网站:http://www.jd.com/
- 关键词:学生*选择
实践过程
将老师的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爬取实验
作业内容
-
要求:熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待 HTML元素等内容。 使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、教学 进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹 中,图片的名称用课程名来存储。
-
候选网站:中国mooc网:https://www.icourse163.org
实践过程
-
实现登录功能
# 登录页面链接 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) # 留出时间扫码登录
-
页面信息定位
以获取课程名称为例:
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
-
数据存入数据库
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实验
作业内容
-
要求:理解Flume架构和关键特性,掌握使用Flume完成日志采集任务。 完成Flume日志采集实验,包含以下步骤:
任务一:开通MapReduce服务
任务二:Python脚本生成测试数据
任务三:配置Kafka
任务四:安装Flume客户端
任务五:配置Flume采集数据
实践过程
任务一:开通MapReduce服务
任务二:Python脚本生成测试数据
任务三:配置Kafka
任务四:安装Flume客户端
任务五:配置Flume采集数据
捕获成功