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. javascipt入门

    一.javascript简介 javascript:(基于对象的编程语言:内部很多对象,我们只需要使用即可,几乎不需要自己创建对象) ECMAScript DOM BOM 存放位置: 建议代码放到ht ...

  2. 获取鼠标经过处的标签的标签名和id

    <script> var el = window.document.body; // 声明一个变量,默认值为body window.document.body.onmouseover = ...

  3. HDU 2196 Computer(经典树形DP)

    题意自己看(猜) 题解 这题很经典,就是记录dp[i][0/1/2]分别代表,从i点向下最大和次大深度,和向上最大深度. 然后转移就行了. 我的写法可能太丑了.死活调不出来,写了一个漂亮的 #incl ...

  4. CF915F Imbalance Value of a Tree (并查集)

    题目大意:给你一棵树,每个点有点权a_{i},求$\sum _{i=1}^{n} \sum _{j=i}^{n} f(i,j)$,$f(i,j)$表示i,j,路径上的点的最大权值-最小权值 正解的思路 ...

  5. electron 新手教程 打包 exe

    1.安装nodejs(会自动安装npm) 2.桌面新建文件夹    your-app  (下面目录结构) your-app/ ├── package.json ├── main.js └── inde ...

  6. autosar

    AUTOSAR – RTE(1)基本概念 1. RTE概述 The Run-Time Environment (RTE) is at the heart of the AUTOSAR ECU arch ...

  7. 实战medusa暴力破解

     medusa介绍: 暴力破解工具:主要可以破解这些模块功能很强大 medusa  的安装 条件: 准备工作:(下载下面软件)   1 wget http://www.foofus.net/jmk/t ...

  8. numpy基础篇-简单入门教程4

    np.set_printoptions(precision=3),只显示小数点后三位 np.random.seed(100) rand_arr = np.random.random([2, 2]) n ...

  9. 【codeforces 411B】Multi-core Processor

    [题目链接]:http://codeforces.com/problemset/problem/411/B [题意] 处理器有n个核;然后有k个存储单元; 有m轮工作;每轮工作都会给每个核确定一个数字 ...

  10. 2015 Multi-University Training Contest 3 hdu 5316 Magician

    Magician Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...