Python抓取极客学院开放数据

本文介绍了使用Python进行数据抓取的步骤,并以极客学院的课程为例,展示了如何抓取并处理多个页面的数据,最终得到了包含课程信息的info.txt文件。
摘要由CSDN通过智能技术生成

Python 是比较美的语言,相见恨晚

抓数据的一般步骤

首先,锁定目标,也就是确定网站链接的格式。
其次,在浏览器中或者在wireshark中尝试抓包,分析数据,主要是利用浏览器的查看源码功能,分析需要抓包的数据的结构特点,确定规律。
编写python代码,分析数据,反反复复,得到脚本。

我的例子

#encoding:utf-8
import requests
import re
class Spider:
    #构造函数
    def __init__(self):
        print u('开始执行爬虫')
    #用来获取页面源码
    def getSource(self,url):
        html=requests.get(url)
        return html
    #产生不同页数
    def changePage(self,url,total_page):
        now_page=int(re.search('pageNum=(\d+)',url,re.S).group(1))
        page_group=[]
        for i in range(now_page,total_page+1):
            link=re.sub('pageNum=\d+','pageNum=%s'%i,url,re.S)
            page_group.append(link)
            return page_group
     #获取每个课程块的内容,方便以后目标的锁定
     def getClass(self,source):
         everyClass=re.findall('(<li id=.*?</li>)',source,re.S)
         return everyClass
     #获取明确的目标
     def getInfo(self,eachClass):
             info{}
             info['title']=re.search('class="lessonimg" title="(.*?)"',eachClass,re.S).group(1)         
             info['content']=re.search('display: none;">(.*?)</p>',eachClass,re.S).group(1).replace('\n','')
             info['srcImg']=re.search('<img src="(.*?)"',eachClass,re.S).group(1)
             timeAndLevel=re.findall('<em>(.*?)</em>',eachClass,re.S)
             info['classtime'] =timeAndLevel[0].replace('\n', '')
             info['classlevel'] = timeAndLevel[1]
             info['learnnum'] = re.search('class="learn-number">(.*?)</em>', eachclass, re.S).group(1)
             return info
         # saveinfo用来保存结果到info.txt文件中
         def saveinfo(self, classinfo):
             f = open('info.txt', 'a')
             for each in classinfo:
               f.writelines(("title:" + each['title'] + "\n").encode('utf-8'))
               f.writelines(("srcImg:" + each['srcImg'] + "\n").encode('utf-8'))
               f.writelines("content:" + (each['content'] + "\n").encode('utf-8').lstrip())
               f.writelines(("classtime:" + each['classtime'] + "\n").encode('utf-8'))
               f.writelines(("classlevel:" + each['classlevel'] + "\n").encode('utf-8'))
               f.writelines(("learnnum:" + each['learnnum'] + "\n\n").encode('utf-8'))
             f.close()
if __name__ == '__main__':
    classinfo = []
    url = 'http://www.jikexueyuan.com/course/?pageNum=1'
    jikespider = Spider()
    all_links = jikespider.changepage(url, 10)
    for link in all_links:
        print u'正在处理页面:' + link
        html = jikespider.getsource(link)
        everyclass = jikespider.geteveryclass(html)
        for each in everyclass:
            info = jikespider.getinfo(each)
            classinfo.append(info)
    jikespider.saveinfo(classinfo)


运行的结果:

开始执行爬虫
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=1
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=2
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=3
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=4
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=5
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=6
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=7
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=8
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=9
正在处理页面:http://www.jikexueyuan.com/course/?pageNum=10
Process finished with exit code 0

info.txt文件一个内容:

title:登录到Guitar运行的 Linux系统
srcImg:http://a1.jikexueyuan.com/home/201607/25/07df/57956e9d40cbe.jpg
content:本课程主要介绍除了使用 HDMI 接口以外的系统登陆方式,便于后期在条件受限的情况下进行Guitar 的开发和学习。
classtime:3课时 8分钟
classlevel:初级
learnnum:2515人学习

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值