网页的图片大致是用Image导入的,使用的是相对路径,例如

<image src="data:image/bg.jpg"/>

通过匹配可以获取image/bg.jpg,与页面地址组合可以得到图片的地址

除了直接引入的图片,还有通过CSS,HTML引入的图片,也需要处理

# -*- coding: utf-8 -*-
import urllib, httplib, urlparse
import sys
import redef httpExists(url):host, path = urlparse.urlsplit(url)[1:3]if ':' in host:# port specified, try to use ithost, port = host.split(':', 1)try:port = int(port)except ValueError:print 'invalid port number %r' % (port,)return Falseelse:# no port specified, use default portport = Nonetry:connection = httplib.HTTPConnection(host, port=port)connection.request("HEAD", path)resp = connection.getresponse( )if resp.status == 200:       # normal 'found' statusfound = Trueelif resp.status == 302:     # recurse on temporary redirectfound = httpExists(urlparse.urljoin(url,resp.getheader('location', '')))else:                        # everything else -> not foundprint "Status %d %s : %s" % (resp.status, resp.reason, url)found = Falseexcept Exception, e:print e.__class__, e, urlfound = Falsereturn found"""根据url获取文件名"""
def gGetFileName(url):if url==None: return Noneif url=="" : return ""arr=url.split("/")return arr[len(arr)-1]"""根据url下载文件,文件名参数指定"""
def gDownloadWithFilename(url,savePath,file):#参数检查,现忽略try:urlopen=urllib.URLopener()fp = urlopen.open(url)data = fp.read()fp.close()print 'download file url :',urlfile=open(savePath + file,'w+b')file.write(data)file.close()except IOError:print "download error!"+ urldef gDownload(url,savePath):fileName = gGetFileName(url)gDownloadWithFilename(url,savePath,fileName)def getRexgList(lines,regx,searchRegx):if lines==None : return lists =[]for line in lines:ismatch = re.search(regx,line,re.IGNORECASE)if ismatch :matchs = re.search(searchRegx,line,re.IGNORECASE)if matchs != None:groups = matchs.groups()for str in groups:if str not in lists:lists.append(str)return lists
def checkLine(lines):for line in lines :matchs = re.search(r'url\((\S+)\)',re.IGNORECASE)if matchs != None :print matchs.groups()
def  getPageLines(url):if url==None : returnif not httpExists(url): return try:page = urllib.urlopen(url)   html = page.readlines()page.close()return htmlexcept:print "getPageLines() error!"return
def getCurrentPageImage(url,savePath):lines = getPageLines(url)print 'lines.length',len(lines)regxlists =  getRexgList(lines,r'src\s*="images(\S+)"',r'src\s*="(\S+)"')if regxlists==None: return print 'getCurrentPageImage() images.length',len(regxlists)for jpg in regxlists:jpg =url + jpggDownload(jpg,savePath)def getCSSImages(link,savePath,url):lines = getPageLines(link)print 'lines.length',len(lines)regxlists =  getRexgList(lines,r'url\((\S+)\)',r'url\((\S+)\)')if regxlists==None: return print 'getCurrentPageImage() images.length',len(regxlists)for jpg in regxlists:jpg =url + jpggDownload(jpg,savePath)"""根据url获取其上的相关htm、html链接,返回list"""
def gGetHtmlLink(url):#参数检查,现忽略rtnList=[]lines=getPageLines(url)regx = r"""href="?(\S+)\.htm"""for link in getRexgList(lines,regx,r'href="(\S+)"'):link =url + linkif link not in rtnList:rtnList.append(link)print linkreturn rtnList
"""根据url获取其上的相关css链接,返回list"""
def gGetCSSLink(url):#参数检查,现忽略rtnList=[]lines=getPageLines(url)regx = r"""href="?(\S+)\.css"""for link in getRexgList(lines,regx,r'href="(\S+)"'):link = url + linkif link not in rtnList:rtnList.append(link)return rtnList
def getPageImage(url,savePath):"""getCurrentPageImage(url,savePath)""""""读取其他的CSS,html文件中的图片links=gGetHtmlLink(url)for link in links:print u'get images on link-html读取'getCurrentPageImage(link,savePath)"""links=gGetCSSLink(url)for link in links:print 'get images on link:',linkgetCSSImages(link,savePath,url)
if __name__ == '__main__':url = 'http://www.templatemo.com/templates/templatemo_281_chrome/'savePath = 'd:/tmp/'print 'download pic from [' + url +']'print 'save to [' +savePath+'] ...'getPageImage(url,savePath)print "download finished"

具体使用的时候根据URL的情况,具体分析得到图片地址的方式。

转载于:https://www.cnblogs.com/yangchengInfo/p/3279374.html

python抓取网页图片相关推荐

  1. python抓取网页图片的小案例

    1.分析 ,要抓取的页面的信息以及对应的源码信息 blog.sina.com.cn/s/blog 93dc666c0101b1bj.html 2.代码模块: 导入正则表达的模块 导入url相关的模块 ...

  2. Python利用bs4批量抓取网页图片并下载保存至本地

    Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...

  3. python抓取网站图片_python抓取图片示例 python抓取网页上图片

    python抓取网页上图片 这个错误时是什么意思 下面是代码 import re import urllib.request imp正则表达式匹配的url有错误 for x in add: print ...

  4. python抓取图片_Python3简单爬虫抓取网页图片

    现在网上有很多python2写的爬虫抓取网页图片的实例,但不适用新手(新手都使用python3环境,不兼容python2), 所以我用Python3的语法写了一个简单抓取网页图片的实例,希望能够帮助到 ...

  5. python 抓取网页链接_从Python中的网页抓取链接

    python 抓取网页链接 Prerequisite: 先决条件: Urllib3: It is a powerful, sanity-friendly HTTP client for Python ...

  6. python抓取网站图片_利用python抓取网站图片

    看了网上关于python抓取网站图片的例子,所以自己也尝试着写一个,但是发现这个网站的src不是标准的路径,需要自己添加前面的目录地址,尝试了几次也不成功,所以希望有经验的朋友指导下. 本人是初学者, ...

  7. python 抓取网页数据

    python 抓取网页数据 此文解决如何从不同网页爬取数据的问题及注意事项,重点说明requests库的应用. 在开始之前,要郑重说明一下,不是每一个网页都可以爬取数据哦.有的网页涉及个人隐私或其他敏 ...

  8. 使用Python爬取网页图片

    使用Python爬取网页图片 李晓文 21 天前 近一段时间在学习如何使用Python进行网络爬虫,越来越觉得Python在处理爬虫问题是非常便捷的,那么接下来我就陆陆续续的将自己学习的爬虫知识分享给 ...

  9. 利用python爬取网页图片

    学习python爬取网页图片的时候,可以通过这个工具去批量下载你想要的图片 开始正题: 我从尤物网去爬取我喜欢的女神的写真照,我们这里主要用到的就两个模块 re和urllib模块,有的时候可能会用到t ...

最新文章

  1. 电脑记事本在哪_【锦囊站第002期】电脑一秒内完成文件搜索是如何实现的?
  2. 【蓝桥java】进制与整除之尼姆堆
  3. python人工智能计算器_招募:基于python的召唤师全时段全技能(含均值AI)计算器全程测试...
  4. 普及组2008NOIP 排座椅(贪心+排序)
  5. Qt工程pro文件配置详解
  6. [Python人工智能] 五.Tensorboard可视化基本用法及绘制整个神经网络
  7. java创造新世界_创建新世界闪退求解决
  8. Obejctive-C 2.0 Mac和iOS开发实践指南(Objective-C 2.0最佳入门指南)
  9. 西南科技大学OJ题 利用二叉树中序及先序遍历确定该二叉树的后序序列0984
  10. python财务案例分析考试答案_财务案例分析带答案(完整版)
  11. 集成算法 | 随机森林回归模型
  12. 华农计算机学院院长,中国计算机学会“CCF走进高校”走进华农
  13. EBS 销售订单登记提示错误 ORA-00604 LPX-00225
  14. Java-Aspose实现Word文字替换(本地储存或浏览器下载)
  15. stm32 I2C总线入门笔记
  16. Error: Unbalanced delimiter found in string
  17. 学计算机的用双核CPU够吗,电脑cpu核数越多越好吗
  18. 如何获取安卓iOS上的微信聊天记录、通过Metasploit控制安卓
  19. Bootstrap下拉菜单失效的解决方法+使用Bootstrap制作响应式网页
  20. 软件开发通识之一:什么是计算机语言?

热门文章

  1. 二级java编写用户界面例题,单选题11—20:2012年计算机二级VB用户界面设计练习题及答案-计算机二级-233网校...
  2. java lambda表达式_「JAVA8」- Lambda 表达式
  3. 学术诚信的重要性_论文投稿触犯“忌讳”,选择“三缄其口”?学术道德底线不能丢...
  4. python 数据库的中文乱码问题
  5. java 命名参数动态替换_使用Kettle的命名参数动态执行作业
  6. 计算机生物模拟试题,2017年高考理综生物部分模拟试题
  7. C语言线性表怎么输入字符串,用c语言创建一个线性表输入元素求直接后继
  8. python复制查题_python面试题(复制的)
  9. java 代码块的意义_Java基础(9) - 静态、代码块
  10. php simplexml 删除,请问一下PHP SimpleXML怎么-删除xpath节点