无比强大!Python抓取cssmoban网站的模版并下载

Python实现抓取http://www.cssmoban.com/cssthemes网站的模版并下载


实现代码

  1. # -*- coding: utf-8 -*-  
  2. import urlparse  
  3. import urllib2  
  4. import re  
  5. import os    
  6. import os.path  
  7.   
  8. URL='http://www.cssmoban.com/cssthemes'  
  9.   
  10. #全局超时设置   
  11. urllib2.socket.setdefaulttimeout(500)  
  12.   
  13. #根据url获取内容  
  14. def getUrlContent(url):  
  15.     response = urllib2.urlopen(url)  
  16.     html = response.read();  
  17.     return html  
  18.   
  19. #获取html中的a标签,且格式是<a target="_blank" href="/showcase/*">的  
  20. def getAllUrl(html):  
  21.     return re.findall('<a[\\s]+href="/cssthemes/\d+\.shtml">.*?\/a>',html)  
  22.   
  23. #获取下载文件的标题  
  24. def getDownTitle(html):  
  25.     return re.findall('\<h1>(.*?)\</h1>',html)  
  26.   
  27. #获取文件下载的url  
  28. def getDownUrl(html):  
  29.     return re.findall('<a.*?class="button btn-down".*?\/a>',html)  
  30.   
  31. #获取下一页的url  
  32. def getNextUrl(html):  
  33.     return re.findall('<a.*?下一页</a>',html)  
  34.   
  35. #下载文件  
  36. def download(title,url):  
  37.     result = urllib2.urlopen(url).read()  
  38.     if os.path.exists("template/")==False:  
  39.         os.makedirs("template/")  
  40.     newname=("template/"+title.decode('utf-8'))  
  41.     newname=newname+'.'+url[url.rfind('.')+1:len(url)]  
  42.     open(newname, "wb").write(result)  
  43.   
  44. #记录日志  
  45. def i(msg):  
  46.     fileobj=open('info.log','a')  
  47.     fileobj.write(msg+'\n')  
  48.     fileobj.close();  
  49.     print msg  
  50. #记录错误日志  
  51. def e(msg):  
  52.     fileobj=open('error.log','a')  
  53.     fileobj.write(msg+'\n')  
  54.     fileobj.close();  
  55.     print msg  
  56. if __name__ == '__main__':  
  57.   
  58.     #print getDownUrl('<a href="http://down.cssmoban.com/cssthemes1/cctp_17_jeans.zip" target="_blank" class="button btn-down" title="免费下载"><i class="icon-down icon-white"></i><i class="icon-white icon-down-transiton"></i>免费下载</a>')  
  59.       
  60.     html= getUrlContent(URL)  
  61.     i('开始下载:%s' %(URL))  
  62.     while True:  
  63.         lista= getAllUrl(html);  
  64.         #print lista;  
  65.         nextPage=getNextUrl(html)  
  66.         #print nextPage[0]  
  67.         nextUrl=''  
  68.         #i('下一页%s'%(nextPage))  
  69.           
  70.         if len(nextPage)<=0:  
  71.             e('地址:%s,未找到下一页,程序退出' %(nextPage))  
  72.             break;  
  73.           
  74.         nextUrl=nextPage[0]  
  75.         nextUrl=URL+'/'+nextUrl[nextUrl.index('href="')+6:nextUrl.index('" target')]  
  76.         #print nextPage  
  77.         for a in lista:  
  78.             downGotoUrl=''  
  79.             try:  
  80.                 #print a.decode('utf-8')  
  81.                 downGotoUrl=(URL+''+a[a.index('href="')+6:a.index('">')])  
  82.                 downGotoUrl=downGotoUrl.replace(URL,'http://www.cssmoban.com')  
  83.                 #print downGotoUrl  
  84.                 downHtml=getUrlContent(downGotoUrl)  
  85.                 #print downHtml  
  86.                 downTitleList= getDownTitle(downHtml)  
  87.                 downTitle=''  
  88.                 if len(downTitleList)>0:  
  89.                     downTitle=downTitleList[0]  
  90.                 #print downTitle  
  91.                 downUrlList= getDownUrl(downHtml)  
  92.                 downUrl=''  
  93.                 if len(downUrlList)>0:  
  94.                     downUrl=downUrlList[0]  
  95.                 downUrl= downUrl[downUrl.index('href="')+6:downUrl.index('" target')]  
  96.                 #print downUrl  
  97.                 i('开始下载:%s,文件名:%s' %(downUrl,downTitle))  
  98.   
  99.                 download(downTitle,downUrl)  
  100.                 i('%s下载完成,保存文件名:%s' %(downUrl,downTitle))  
  101.             except Exception,e:  
  102.                 e('地址:%s下载失败,失败信息:' %(downGotoUrl))  
  103.                 e(str(e))  
  104.                   
  105.   
  106.         i('-----------------------------------------')  
  107.         i('执行下一页:%s' %(nextUrl))  
  108.         html= getUrlContent(nextUrl)  
  109.       
  110.           



原文地址:https://blog.csdn.net/wiker_yong/article/details/25844349

posted @ 2018-06-26 09:22  星朝  阅读(1092)  评论(0编辑  收藏  举报