python练手之爬虫篇(一)

因为这段时间比较闲,所以有很多时间在校园网内看视频(很颓废,有木有o(╯□╰)o)

记得暑假时学校官网下部出现一个新链接,“网络资源服务”,进去如下图所示:


发现除了电影、电视剧和视频资源外,其他的都可以下载。

其实这个网站就和之前的ftp差不多,一开始还挺喜欢这个在线播放的,毕竟不用如之前ftp一样需要先花费些时间下载下来观看,可以直接在线播放,因为校园网是光缆铺设的所以在线播放毫无压力。但是有时候想下载下来放到移动设备上看,可是没有下载功能,于是正好这段时间自学了python,可以以此实践练练手!


通过火狐浏览器上的插件httpfox或者直接调出开发者模式查看网络情况,观察浏览器与服务器之间的交互情况。暂时就不截图了O(∩_∩)O~

发现当点击在线播放时,服务器直返回数据类型是text/html,所以实现下载非常简单,直接保存即可。。

其他的就比较基础了,直接模拟浏览器发出请求,注意需要cookie等。

直接上代码了,以后有时间再写仔细一点。

# coding=gbk
import urllib,urllib2
import cookielib
import re
def Down(url,typeid):
    try:
        cj = cookielib.CookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        headers = {
                'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0',
                'Referer':'http://www2.ahnu.edu.cn/ftp/eftphelp.htm'
            }
        req = urllib2.Request(url,headers=headers)
        opener.open(req)

        url = 'http://210.45.192.104/userOperator.do?flag=queryClassify&typeid='+typeid
        headers = {
                'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0',
                'Referer':'http://210.45.192.104'
            }
        req = urllib2.Request(url,headers=headers)
        rlt = (opener.open(req)).read()
        rule = 'title="(.*?)"'
        lst = re.findall(rule,rlt)
        for i in xrange(len(lst)):
            print i,lst[i].decode('utf-8')
        fileid = raw_input('请输入所要下载资源的序号:\n')

        rule = 'href="/down(.*?)"'
        urlst = re.findall(rule,rlt)

        rule = 'id=(.*)'
        s = urlst[int(fileid)]
        loadid = re.findall(rule,s)        
        urlnew = 'http://210.45.192.104/downOrLookFile.do?flag=downloadfile&fileid='+loadid[0]
        #print urlnew
        headers = {
                'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0',
                'Referer':'http://210.45.192.104/userOperator.do?flag=queryClassify&typeid='+typeid
            }
        req = urllib2.Request(urlnew,headers=headers)
        rlt = opener.open(req)

        print urlst[int(fileid)]
        #print rlt.read()

        print '开始下载,请耐心等待......'
        filename = 'F:\\校园网络资源下载\\'
        name = lst[int(fileid)].decode('utf-8').encode('gbk')

        f = open(filename+name,'wb')
        f.write(rlt.read())
    except Exception,e:
        print str(e)

if __name__ == '__main__':
    while 1:
        #Down('http://210.45.192.104')
        hintstr = '''-------------------------
类型id:
1:电影
2:视频资源
3:音乐
4:文档
5:电视剧
-------------------------'''
        print hintstr
        typeid = raw_input('请输入所要下载资源的类型id:\n')
        if typeid == '5':
            typeid = '6'
        Down('http://210.45.192.104',typeid)
        print '下载完毕!'
        flag = raw_input('是否继续下载?y/n\n')
        if flag!='y':
            break

自己用的,所以就没设计ui了。下面是运行截图:



实现的非常简单,只爬了每种资源的第一页,没有gui设计,没有异常捕捉、处理。













你可能感兴趣的:(python自学笔记)