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. Codeforces Round #289 Div 2

    A. Maximum in Table 题意:给定一个表格,它的第一行全为1,第一列全为1,另外的数满足a[i][j]=a[i-1][j]+a[i][j-1],求这个表格中的最大的数 a[n][n]即 ...

  2. 优动漫PAINT画树教程

    依次解析画树要点!让画树不再是难事~ 优动漫PAINT下载:http://wm.makeding.com/iclk/?zoneid=18597

  3. QT+OpenCV进行图像采集最小时延能够达到20ms

    得到“算法高性能”项目的支持,目前成功地在Win10上运行WB2,感觉目前的代码速度慢.响应慢.CPU占用比例高.这种情况下3399上能够运行,说明这个平台已经是很强的了.下一步,首先在Windows ...

  4. .startsWith和endsWith的使用方法与说明

    a.startsWith(b) --判断字符串a,是不是以字符串b开头 a.endsWith(b) --判断字符串a,是不是以字符串b结尾

  5. Mojo For Chromium Developers

    Overview This document contains the minimum amount of information needed for a developer to start us ...

  6. [APIO2012]派遣 可并堆(左偏树)

    没啥说的,自底向上合并大根堆即可. 一边合并,一边贪心弹堆顶直到堆的总和不大于预算. Code: #include <cstdio> #include <algorithm> ...

  7. .is() 全选复选的判断

    /* 全选/全不选 */function selectAll(){ if($("#ckAll").is(":checked",true)){ $(": ...

  8. ERROR in xxxx.js from UglifyJS——配置版本混杂版

    常规解决套路可以参考这篇:https://segmentfault.com/a/11... 我采用了上面的做法,依然没法解决.我采用的是vue-cli脚手架自动生成的项目结构: vue-cli版本 2 ...

  9. Camera Calibration 相机标定:原理简介(五)

    5 基于2D标定物的标定方法 基于2D标定物的标定方法,原理与基于3D标定物相同,只是通过相机对一个平面进行成像,就可得到相机的标定参数,由于标定物为平面,本身所具有的约束条机,相对后者标定更为简单. ...

  10. How to customize Skin Gallery - Remove / rename skins and groups

    1. REMOVE (HIDE) A SPECIFIC SKIN Traverse through the gallery group collection, then through its gal ...