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

实现代码

# -*- coding: utf-8 -*-
import urlparse
import urllib2
import re
import os
import os.path URL='http://www.cssmoban.com/cssthemes' #全局超时设置
urllib2.socket.setdefaulttimeout(500) #依据url获取内容
def getUrlContent(url):
response = urllib2.urlopen(url)
html = response.read();
return html #获取html中的a标签。且格式是<a target="_blank" href="/showcase/*">的
def getAllUrl(html):
return re.findall('<a[\\s]+href="/cssthemes/\d+\.shtml">.*? \/a>',html) #获取下载文件的标题
def getDownTitle(html):
return re.findall('\<h1>(.*? )\</h1>',html) #获取文件下载的url
def getDownUrl(html):
return re.findall('<a.*?class="button btn-down".*? \/a>',html) #获取下一页的url
def getNextUrl(html):
return re.findall('<a.*? 下一页</a>',html) #下载文件
def download(title,url):
result = urllib2.urlopen(url).read()
if os.path.exists("template/")==False:
os.makedirs("template/")
newname=("template/"+title.decode('utf-8'))
newname=newname+'.'+url[url.rfind('.')+1:len(url)]
open(newname, "wb").write(result) #记录日志
def i(msg):
fileobj=open('info.log','a')
fileobj.write(msg+'\n')
fileobj.close();
print msg
#记录错误日志
def e(msg):
fileobj=open('error.log','a')
fileobj.write(msg+'\n')
fileobj.close();
print msg
if __name__ == '__main__': #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>') html= getUrlContent(URL)
i('開始下载:%s' %(URL))
while True:
lista= getAllUrl(html);
#print lista;
nextPage=getNextUrl(html)
#print nextPage[0]
nextUrl=''
#i('下一页%s'%(nextPage)) if len(nextPage)<=0:
e('地址:%s。未找到下一页,程序退出' %(nextPage))
break; nextUrl=nextPage[0]
nextUrl=URL+'/'+nextUrl[nextUrl.index('href="')+6:nextUrl.index('" target')]
#print nextPage
for a in lista:
downGotoUrl=''
try:
#print a.decode('utf-8')
downGotoUrl=(URL+''+a[a.index('href="')+6:a.index('">')])
downGotoUrl=downGotoUrl.replace(URL,'http://www.cssmoban.com')
#print downGotoUrl
downHtml=getUrlContent(downGotoUrl)
#print downHtml
downTitleList= getDownTitle(downHtml)
downTitle=''
if len(downTitleList)>0:
downTitle=downTitleList[0]
#print downTitle
downUrlList= getDownUrl(downHtml)
downUrl=''
if len(downUrlList)>0:
downUrl=downUrlList[0]
downUrl= downUrl[downUrl.index('href="')+6:downUrl.index('" target')]
#print downUrl
i('開始下载:%s,文件名称:%s' %(downUrl,downTitle)) download(downTitle,downUrl)
i('%s下载完毕。保存文件名称:%s' %(downUrl,downTitle))
except Exception,e:
e('地址:%s下载失败,失败信息:' %(downGotoUrl))
e(str(e)) i('-----------------------------------------')
i('运行下一页:%s' %(nextUrl))
html= getUrlContent(nextUrl)

最新文章

  1. Objective-C中的委托(代理)模式
  2. 01-04 Json和弹窗
  3. Linux的nm查看动态和静态库中的符号
  4. Application、 session、iewstate,以及repeater 的commang用法
  5. 下面将详细说明useradd与usermod 的参数及用法!
  6. Oracle 10g安装64位图解流程
  7. Memcached Java Client API详解
  8. oracle数据库导入导出dmp文件oracle命令
  9. Restaurant
  10. Windows Intellij环境下Gradle的 “Could not determine Java version from ‘9.0.1’”的解决方式
  11. SPOJ D-QUERY
  12. 字符串赋值给字符指针(char *a=&quot;hello&quot;)的正确理解方式
  13. windows10误删Administrator用户的家目录之后
  14. 【STM32】PWM DAC基本原理(实验:PWM实现DAC)
  15. oracle flashback 后主键及索引更改问题
  16. php调试用的几个小方法
  17. centos6 安装python3.5后pip无法使用的处理
  18. Linux软件源书写格式解析及本地yum源制作
  19. Sublime Text3安装以及初次配置
  20. java Overloaded的方法是否可以改变返回值的类型?

热门文章

  1. 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题&#215;3+变形+一道大水题
  2. python 打包详解
  3. Python开发基础-Day17面向对象编程介绍、类和对象
  4. 【并查集】星球大战starwar
  5. 【POJ】1088滑雪
  6. 【线段树】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem J. Jedi Training
  7. 【动态规划】【滚动数组】【搜索】Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) D. Field expansion
  8. 打造百度网盘备份利器:自动备份Linux VPS文件和多线程下载百度网盘资源
  9. Spring注解@Primary的意思
  10. C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件