您的位置:首页 > 编程语言 > Python开发

python练手之爬虫篇(一)

2015-10-30 11:08 453 查看
因为这段时间比较闲,所以有很多时间在校园网内看视频(很颓废,有木有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设计,没有异常捕捉、处理。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: