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. 脱离node自己使用普通的requirejs管理js资源

    首先,工程目录: 现在主页面(web框架写法.html): <!DOCTYPE html> <html lang="en"> <head> &l ...

  2. 虚拟机CentOS6.8下安装mycat

    安装mycat前,首先安装jdk1.7及以上版本 安装可参照 https://www.cnblogs.com/llhhll/p/9260913.html 下载mycat 1.6版本 wget   ht ...

  3. POJ 2155 Matrix【 二维树状数组 】

    题意:给出两种操作,C是给出一个矩形的左上角和左下角的下标,把这个矩形里面的0变成1,1变成0,Q是询问某个点的值 看这篇论文讲得很清楚 http://wenku.baidu.com/view/1e5 ...

  4. lua_pcall与lua_call之间的区别

    lua_pcall与lua_call之间的区别 定义: void lua_call (lua_State *L, int nargs, int nresults); int lua_pcall (lu ...

  5. jquery 遍历 table 下所有得tr td

    $("#middle").contents().find("tbody tr").each(function(i,n){ var child = $(this) ...

  6. React 使用link在url添加参数(url中不可见)

    1. 在要跳转页面添加<Link to={{ pathname: `/staffManagement/cardRecord`, state: {time: YYYY-MM-dd, name: s ...

  7. COGS——T 826. [Tyvj Feb11] GF打dota

    http://www.cogs.pro/cogs/problem/problem.php?pid=826 ★★☆   输入文件:dota.in   输出文件:dota.out   简单对比时间限制:1 ...

  8. Python中文字符问题

    Python中对中文字符的操作时常会使程序出现乱码 不全然管用的处理方法: 读取数据时使用encode编码为Bytes以保护数据 使用时转化为string并使用decode解码 如: title = ...

  9. httpd: Could not reliably determine the server&#39;s fully qualified domain name

    [root@luozhonghua sbin]# service httpd start Starting httpd: httpd: apr_sockaddr_info_get() failed f ...

  10. jackson 解析json含有不规则的属性的json字符串的方法

    对于json中含有点号,等其它特殊的,不是规范的java变量名的字符,能够使用一个注解来处理. 贴代码: import com.fasterxml.jackson.annotation.JsonPro ...