python 爬虫 极客学院

# coding: utf-8

import requests
import re
import sys

reload(sys)
sys.setdefaultencoding("utf-8")


class Spider(object):
    def __init__(self, retfile):
        self.retfile = retfile
        print 'spider man is ready...'
        self.urls = []
        self.data = ''
        self.page = '0'

    def getPage(self, urlbase='http://www.jikexueyuan.com/course/?pageNum=', pagenum='1'):
        for i in range(1, pagenum):
            self.urls.append(urlbase + str(i))

    def showPage(self):
        for link in self.urls:
            print 'url:', link

    def getHtml(self, url):
        print 'url', url
        self.page = str(re.findall(r'pageNum=(\d+)', url)[0])
        html = requests.get(url)
        if html:
            pagenum = 'pagedir/'+ "page" + self.page + '.html'
            with open(pagenum, 'w') as f:
                f.write(html.text)
            # print html.text
            return html.text
        else:
            print 'not foud'
            return False

    def gettiltle(self, html):
        self.title = re.findall(r'class="lessonimg" title="(.*?)"', html, re.S)
        for i in self.title:
            print i

    def getlearnnum(self, html):
        self.learnum = re.findall(r'<em class="learn-number">(.*?)</em>', html, re.S)
        for i in self.learnum:
            print i

    def gettime(self, html):
        print 'time'

    def getlevel(self, html):
        self.level = re.findall(r'<em>(.*?)</em>', html, re.S)
        for i in self.level:
            print 'level:', i

    def getinfo(self, html):
        self.gettiltle(html)
        self.getlearnnum(html)
        self.gettime(html)
        self.getlevel(html)

    def test(self):
        # jkxyspider.showPage()
        print '-' * 20
        # http: // www.jikexueyuan.com / course /?pageNum = 3
        # http: // www.jikexueyuan.com / course /?page = 15  ---> is errxxx...
        html = self.getHtml('http://www.jikexueyuan.com/course/?pageNum=1')
        with open('page1.html', 'w') as f:
            f.write(html)

        self.getinfo(html)

        print 'test ok '

def main(fp):

    jkxyspider = Spider(fp)
    jkxyspider.getPage('http://www.jikexueyuan.com/course/?pageNum=', 20)
    # jkxyspider.test()

    for url in jkxyspider.urls:
        print url
        html = jkxyspider.getHtml(url)
        if html:
            try:
                jkxyspider.getinfo(html)
                print 'test ok '
            except IndexError, e:
                print 'Error:', e
                continue


if __name__ == '__main__':
    with open('spiderinfo.txt','w') as f:
        main(f)

-----------------------------------------------------------------html

运行结果:/usr/bin/python2.7 /home/hyh/github/python/ide/part2/爬虫实战3.py
spider man is ready...
http://www.jikexueyuan.com/course/?pageNum=1
url http://www.jikexueyuan.com/course/?pageNum=1
Android 快速开发框架之 xUtils3
Microsoft SQL Server 数据库的查询优化器的运行方式
树莓派项目实践(一)——可用 web 控制的人体感应小夜灯
Docker 安装
Cocos2d-x 引擎源码中的纹理
Dubbo 使用入门(下)
JavaScript 异步编程
Google  I/O 2016 技术揭秘与前瞻
Docker 基础知识
OSG人机交互
Arduino 模拟鼠标键盘(二)
Flume 基础架构
一元线性回归
Cocos2d-x 引擎源码中的 OpenGL ES知识(下)
编程之美“凌云之智“线上分享之 Azure 线上培训及工程师答疑
Launcher3-文件夹自动整理
iOS 封装第三方支付 SDK
物联网技术导论(十一)物联网中的信息安全与隐私保护
C 语言编程实战:学生信息管理系统(下)
名企数据结构面试题之 DFS(上)
Tornado 开发--TCP 编程
编程之美“凌云之智“线上分享之复赛题目提点
立刻着手 Swift 开发 - 踏上 Swift 征程
Hadoop MapReduce 进阶
2768人学习
2459人学习
3065人学习
2882人学习
2370人学习
2963人学习
4463人学习
7351人学习
3584人学习
2574人学习
2596人学习
2732人学习
2472人学习
2359人学习
3185人学习
3009人学习
2859人学习
2490人学习
4287人学习
2418人学习
2509人学习
2874人学习
2407人学习
2485人学习
time
level: 6课时
                            95分钟
level: 初级
level: 3课时
                            58分钟
level: 中级
level: 4课时
                            67分钟
level: 中级
level: 3课时
                            21分钟python

相关文章
相关标签/搜索