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

相關文章
相關標籤/搜索