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

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)&lt;=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('"&gt;')])
downGotoUrl=downGotoUrl.replace(URL,'http://www.cssmoban.com')
#print downGotoUrl
downHtml=getUrlContent(downGotoUrl)
#print downHtml
downTitleList= getDownTitle(downHtml)
downTitle=''
if len(downTitleList)&gt;0:
downTitle=downTitleList[0]
#print downTitle
downUrlList= getDownUrl(downHtml)
downUrl=''
if len(downUrlList)&gt;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)

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

无比强大!Python抓取cssmoban网站的模版并下载的更多相关文章

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

    Python实现抓取http://www.cssmoban.com/cssthemes站点的模版并下载 实现代码 # -*- coding: utf-8 -*- import urlparse imp ...

  2. 用python抓取求职网站信息

    本次抓取的是智联招聘网站搜索“数据分析师”之后的信息. python版本: python3.5. 我用的主要package是 Beautifulsoup + Requests+csv 另外,我将招聘内 ...

  3. python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频

    最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 “一出好戏” . 分析页面 我用的是c ...

  4. python抓取网站提示错误ssl.SSLCertVerificationError处理

    python在抓取制定网站的错误提示:ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify ...

  5. Python多进程方式抓取基金网站内容的方法分析

    因为进程也不是越多越好,我们计划分3个进程执行.意思就是 :把总共要抓取的28页分成三部分. 怎么分呢? # 初始range r = range(1,29) # 步长 step = 10 myList ...

  6. Python抓取视频内容

    Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...

  7. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

  8. python抓取性感尤物美女图

    由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...

  9. python抓取网页例子

    python抓取网页例子 最近在学习python,刚刚完成了一个网页抓取的例子,通过python抓取全世界所有的学校以及学院的数据,并存为xml文件.数据源是人人网. 因为刚学习python,写的代码 ...

随机推荐

  1. SpringMVC学习(二)——SpringMVC架构及组件(及其运行原理)-转载

    相信大家通过前文的学习,已经对SpringMVC这个框架多少有些理解了.还记得上一篇文章中SpringMVC的处理流程吗?  这个图大致描述了SpringMVC的整个处理流程,这个流程图还是相对来说比 ...

  2. Reactive programming-文章解析

    数据源(信息源):静态的数组.动态的流: In computing, reactive programming is a declarative programming paradigm concer ...

  3. FCC编程题之中级算法篇(上)

    介绍 FCC: 全称为freeCodeCamp,是一个非盈利性的.面向全世界的编程练习网站.这次的算法题来源于FCC的中级算法题. FCC中级算法篇共分为(上).(中).(下)三篇.每篇各介绍7道算法 ...

  4. vue的表格加单选框

    https://www.cnblogs.com/calamus/p/8569196.html

  5. 字符串的格式化(转自武sir)

    百分号s方式: (name)      可选,用于选择指定的key flags          可选,可供选择的值有: +       右对齐:正数前加正好,负数前加负号: -        左对齐 ...

  6. sqlmap 实战漏洞平台dvwa进行密码破解

    2016-05-24 (1)实验的具体的环境极其思路 首先我们要检测我们的漏洞平台是否有sql注入 ,进行简单的测试发现在用户userid 上存在注入的漏洞 使用抓包工具对其cookie 进行获取如下 ...

  7. Android群英传-拼图游戏puzzle-代码设计和实现

    上个周末,3个小时总体上读完了<Android群英传>,本周主要在研究代码层次的设计和实现.  编译安装在手机上,玩了几把,结合代码,一周时间才掌握了整体的思路.  大部分时间,其实花在了 ...

  8. RvmTranslator7.0-OBJ

    RvmTranslator7.0-OBJ eryar@163.com RvmTranslator can translate the RVM file exported by AVEVA Plant( ...

  9. 51nod-1189: 阶乘分数

    [传送门:51nod-1189] 简要题意: 给出一个数n,求出有多少个正整数x,y(0<x<=y)满足$1/n!=1/x+1/y$ 题解: 一开始还以为不可做 结果推一下柿子就会了 $1 ...

  10. nyoj--46--最少乘法次数(数学+技巧)

    最少乘法次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2=2 ...