首页 > 学院 > 开发设计 > 正文

基于requests实现极客学院课程爬虫

2019-11-14 17:01:31
字体:
来源:转载
供稿:网友

背景

本文主要是为了完成极客学院课程《Python 单线程爬虫》中讲师布置的实战作业。

开发环境

操作系统:windows 10

Python :Python 2.7

IDE:PyCharm 4.5.3

安装requests

在CMD命令提示窗口敲以下一行命令即可安装。

pip install requests

实现代码

# coding=utf-8__author__ = 'scaleworld'import requestsimport reimport sysreload(sys)sys.setdefaultencoding("utf-8")class Spider:    def __init__(self):        PRint '开始爬取极客学院课程信息。。。'    # 获取源代码    def getSource(self, url):        html = requests.get(url)        return html.text    # 获取每个课程块信息    def getLessons(self, source):        lessons = re.findall('deg="0" >(.*?)</li>', source, re.S)        return lessons    # 获取课程信息,如课程名称、课程介绍、课程时间、课程等级、学习人数    def getLessonInfo(self, lesson):        info = {}        info['title'] = re.search('<h2 class="lesson-info-h2"><a(.*?)>(.*?)</a></h2>', lesson, re.S).group(2).strip()        info['desc'] = re.search('<p style="height: 0px; opacity: 0; display: none;">(.*?)</p>', lesson, re.S).group(            1).strip()        timeandlevel = re.findall('<em>(.*?)</em>', lesson, re.S)        info['time'] = timeandlevel[0].strip().replace("/n", "").replace("    ", "")        info['level'] = timeandlevel[1].strip()        info['learnNumber'] = re.search('"learn-number">(.*?)</em>', lesson, re.S).group(1).strip()        return info    # 保存课程信息到文件LessionInfos.txt    def saveLessionInfos(self, lessonInfos):        # 'w':只写,会覆盖之前写入的内容        # 也可以用'a':追加到文件末尾        # 如果文件不存在,则自动创建文件        f = open('LessionInfos.txt', 'w')        i = 0        for each in lessonInfos:            i += 1            f.writelines('' + str(i) + '个课程:/n')            f.writelines('title:' + each['title'] + '/n')            f.writelines('desc:' + each['desc'] + '/n')            f.writelines('time:' + each['time'] + '/n')            f.writelines('level:' + each['level'] + '/n')            f.writelines('learnNumber:' + each['learnNumber'] + '/n/n')        f.close()if __name__ == '__main__':    # 定义课程信息数组    lessonInfos = []    # 课程信息页面url    url = 'http://www.jikexueyuan.com/course/'    # 实例化爬虫    spider = Spider()    # 取[1,21)及1到20页的课程信息    for i in range(1, 21):        # 构建分页URL        pageUrl = url + '?pageNum=' + str(i)        print '正在处理页面:' + pageUrl        source = spider.getSource(pageUrl)        lessons = spider.getLessons(source)        for lesson in lessons:            lessonInfo = spider.getLessonInfo(lesson)            lessonInfos.append(lessonInfo)            # print 'title:'+lessonInfo.get('title')            # print 'desc:'+lessonInfo.get('desc')            # print 'time:'+lessonInfo.get('time')            # print 'level:'+lessonInfo.get('level')            # print 'learnNumber:'+lessonInfo.get('learnNumber')        print '已处理' + str(lessons.__len__()) + '个课程信息。'    print '极客学院课程信息爬取完毕,正在保存课程信息。。。'    spider.saveLessionInfos(lessonInfos)    print '极客学院课程信息保存完毕。' 

抓取结果示例

第1个课程:
title:WordPress 主题模板文件
desc:本课程主要介绍构成 WordPress 主题的模板文件,模板文件的引用和模板文件的层次体系。
time:3课时36分钟
level:中级
learnNumber:2215人学习

第2个课程:
title:Android 开发规范
desc:本课程主要为大家讲解在 Android 开发中搭建项目时,整体的设计架构风格和规范以及基础架构、代码命名和编写规范等等。
time:3课时41分钟
level:初级
learnNumber:2874人学习

……

结语

极客学院是个非常好的学习网站,大家可以点此链接获取免费的30天VIP福利。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表