【数据采集】获取MOOC课程学习进展
【摘要】 1. 获取MOOC信息 1.1 题目熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、教学进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹中,图片的名称用课程名来存储 1.2 思路 1.2.1 驱动启动引入驱动chr...
1. 获取MOOC信息
1.1 题目
熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、教学
进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹中,图片的名称用课程名来存储
1.2 思路
1.2.1 驱动启动
- 引入驱动
chrome_path = r"D:\Download\Dirver\chromedriver_win32\chromedriver_win32\chromedriver.exe" # 驱动的路径
browser = webdriver.Chrome(executable_path=chrome_path)
- 发送请求
browser.get('https://www.icourse163.org/')
browser.implicitly_wait(5)
- 窗口最大化
browser.maximize_window()
- 扫码登录,也可以获取input框输入,但如果爬取次数太多的话,会有两次的验证码。
browser.find_element_by_xpath('//*[@id="j-topnav"]/div/a').click()
time.sleep(5)
1.2.2 获取信息
- 跳转个人中心页面
注意:
一定要登录之后才能跳转,不然此时浏览器是没有用户信息的,就会没有你学了多久这个数据
browser.implicitly_wait(10)
browser.get('https://www.icourse163.org/home.htm?userId=1401537859#/home/course')
browser.implicitly_wait(10)
- 滑到底部
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
- 节点获取
cCourse = browser.find_elements_by_xpath(
'//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[1]/div[1]/div/span[2]')
cCollege = browser.find_elements_by_xpath('//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[1]/div[2]/a')
cSchedule = browser.find_elements_by_xpath(
'//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[2]/div[1]/div[1]/div[1]/a/span')
cImgUrl = browser.find_elements_by_xpath(
'//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[1]/img')
cCourseStatus = browser.find_elements_by_xpath(
'//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[2]/div[2]')
1.2.3 数据存储
- 下载图片函数
def download(name,img):
print(f"正在保存第{name}张图片 路径:{img}")
resp = requests.get(img)
with open(f'./imgs/{name}.jpg', 'wb') as f: # 保存到这个image路径下
f.write(resp.content)
- 数据库对象,包括链接数据库与插入数据
class database():
def __init__(self):
self.HOSTNAME = '127.0.0.1'
self.PORT = '3306'
self.DATABASE = 'scrapy_homeword'
self.USERNAME = 'root'
self.PASSWORD = 'root'
# 打开数据库连接
self.conn = pymysql.connect(host=self.HOSTNAME, user=self.USERNAME, password=self.PASSWORD,
database=self.DATABASE, charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
self.cursor = self.conn.cursor()
def insertData(self, lt):
sql = "INSERT INTO mooc(cCourse,cCollege , cSchedule , cCourseStatus ,cImgUrl) " \
"VALUES ( %s, %s, %s, %s,%s)"
try:
self.conn.commit()
self.cursor.execute(sql, lt)
print("插入成功")
except Exception as err:
print("插入失败", err)
- 控制台打印
for Course, College, Schedule, ImgUrl, CourseStatus in zip(cCourse, cCollege, cSchedule, cImgUrl, cCourseStatus):
print(Course.text, College.text, Schedule.text, ImgUrl.get_attribute("src"), CourseStatus.text)
download(Course.text,ImgUrl.get_attribute("src"))
db.insertData([Course.text, College.text, Schedule.text, CourseStatus.text, ImgUrl.get_attribute("src")])
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)