当前位置: 主页

python爬虫抓取腾讯课堂数据(课程名、公司名、报名量、好评率...)

#/usr/bin/env python
#coding=utf-8
import urllib
import urllib2
from pyquery import PyQuery as pq
import re
from myLog import *
from mysql import *
    
# 抓取腾讯课堂相关数据
# www.yaopengtao.com
class keSpider:
    
    def __init__(self, url):
        #列表地址
        self.url    = url
        #列表页
        self.list   = '';
        #课程页
        self.course = '';
        #数据库
        self.db     = MySQL(getLoger('test'),'127.0.0.1','root','123456')
        self.db.selectDb('kefu')
    
    #################
    #  获取课程列表   #
    #################
    def getList(self, pageNum = 1):
    
        print "正在采集第 %s" % pageNum + " 页 \n"
        #读取列表页
        self.list = pq(self.url + "&page=%s" % pageNum)
        listItem  = self.list('div[class=main-left]').find('li').find('a').filter('.item-img-link')
        i = 0
        for item in listItem:
            i+=1
            course_url = pq(item).attr('href')
            #开始采集
            self.getPage('http:'+course_url.lstrip())
            #本次采集结束,进入下一轮
            if i == 24:
                print "本页采集完毕,开始进入下一页 \n"
                self.getList(pageNum+1)
                     
    #################
    #  解析课程网页   #
    #################
    def getPage(self, course_url = ''):
    
        try:
            if course_url != '':
                self.course = pq(course_url)
                #报名量
                appyNum  = self.course("span").filter(".apply-num.js-apply-num").text()
                #课程标题
                title    = self.course("span").filter(".title-main").text().encode("utf-8")
                #好评度
                haoping  = self.course("span").filter(".rate-num").text()
                haoping  = haoping.replace("%",'')
                #公司名称
                company  = self.course("a").filter(".tt-link.js-agency-name").text().encode("utf-8")
                #公司好评度
                company_ping = self.course("span").filter(".item-num").text()
                company_ping = company_ping.replace("%",'')
                #课程数量
                course_num = self.course(".tree-list").find("span").eq(1).attr('data-num')
                #课程数量
                stu_num = self.course(".tree-list").find("span").eq(2).attr('data-num')
                #QQ群
                qun  = self.course("a").filter(".item-tt.js-group-entrance").attr("data-gc")
                    
                #入库
                sql  = '''INSERT into tx_ke (title, apply, haoping, company, company_ping, course_num, stu_num, qun) values ('%s','%s','%s','%s','%s','%s','%s','%s');''' % (title, appyNum, haoping, company, company_ping, course_num, stu_num, qun)
    
                print sql
                self.db.exesql(sql)
    
                print ("标题:%s \n报名量:%s \n 好评率:%s \n公司名称:%s \n\n 公司好评率: %s \n\n 课程数量: %s \n\n 学生数量:%s \n\n QQ群:%s " % (title.replace('+', ' '), appyNum, haoping, company, company_ping,course_num, stu_num, qun) )
                print "\n\n "
        except urllib2.URLError, e:
            if hasattr(e, "reason"):  
                print course_url + "采集出错 \n"
    
p = keSpider('https://ke.qq.com/course/list?mt=1001')
print p.getList()

SQL:

CREATE TABLE `tx_ke` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '标题',
  `apply` int(255) NOT NULL COMMENT '报名量',
  `haoping` int(255) NOT NULL COMMENT '课程好评',
  `company` varchar(255) NOT NULL COMMENT '公司好评',
  `company_ping` int(255) NOT NULL COMMENT '公司好评',
  `course_num` int(255) NOT NULL COMMENT '课程数量',
  `stu_num` int(255) NOT NULL COMMENT '学生数量',
  `qun` int(255) NOT NULL COMMENT '群号码',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

完整的代码包:点击下载

分享一下 :
我来说两句 0 条评论 点击全部查看