`
metaphy
  • 浏览: 344145 次
  • 性别: Icon_minigender_1
  • 来自: 大西洋底
社区版块
存档分类
最新评论

用Python抓网页上的图片

阅读更多
用Python做这类事情简直太爽了,重发一个老的代码,可指定网址下载里面的图片

# -*- coding: utf-8 -*-
"""
some function by metaphy,2007-04-03,copyleft
version 0.2
"""
import urllib, httplib, urlparse
import re
import random

"""judge url exists or not,by others"""
def httpExists(url):
    host, path = urlparse.urlsplit(url)[1:3]
    if ':' in host:
        # port specified, try to use it
        host, port = host.split(':', 1)
        try:
            port = int(port)
        except ValueError:
            print 'invalid port number %r' % (port,)
            return False
    else:
        # no port specified, use default port
        port = None
    try:
        connection = httplib.HTTPConnection(host, port=port)
        connection.request("HEAD", path)
        resp = connection.getresponse( )
        if resp.status == 200:       # normal 'found' status
            found = True
        elif resp.status == 302:     # recurse on temporary redirect
            found = httpExists(urlparse.urljoin(url,resp.getheader('location', '')))
        else:                        # everything else -> not found
            print "Status %d %s : %s" % (resp.status, resp.reason, url)
            found = False
    except Exception, e:
        print e.__class__, e, url
        found = False
    return found

"""get html src,return lines[]"""
def gGetHtmlLines(url):
    if url==None : return
    if not httpExists(url): return 
    try:
        page = urllib.urlopen(url)   
        html = page.readlines()
        page.close()
        return html
    except:
        print "gGetHtmlLines() error!"
        return
"""get html src,return string"""
def gGetHtml(url):
    if url==None : return
    if not httpExists(url): return 
    try:
        page = urllib.urlopen(url)   
        html = page.read()
        page.close()
        return html
    except:
        print "gGetHtml() error!"
        return

"""根据url获取文件名"""
def gGetFileName(url):
    if url==None: return None
    if url=="" : return ""
    arr=url.split("/")
    return arr[len(arr)-1]

"""生成随机文件名"""
def gRandFilename(type):
    fname = ''
    for i in range(16):
        fname = fname + chr(random.randint(65,90))
        fname = fname + chr(random.randint(48,57))
    return fname + '.' + type
"""根据url和其上的link,得到link的绝对地址"""
def gGetAbslLink(url,link):
    if url==None or link == None : return 
    if url=='' or link=='' : return url 
    addr = '' 
    if link[0] == '/' : 
        addr = gGetHttpAddr(url) + link 
    elif len(link)>3 and link[0:4] == 'http':
        addr =  link 
    elif len(link)>2 and link[0:2] == '..':
        addr = gGetHttpAddrFatherAssign(url,link)
    else:
        addr = gGetHttpAddrFather(url) + link 

    return addr 

"""根据输入的lines,匹配正则表达式,返回list"""
def gGetRegList(linesList,regx):
    if linesList==None : return 
    rtnList=[]
    for line in linesList:
        matchs = re.search(regx, line, re.IGNORECASE)
        if matchs!=None:
            allGroups = matchs.groups()
            for foundStr in allGroups:
                if foundStr not in rtnList:
                    rtnList.append(foundStr)
    return rtnList
"""根据url下载文件,文件名参数指定"""
def gDownloadWithFilename(url,savePath,file):
    #参数检查,现忽略
    try:
        urlopen=urllib.URLopener()
        fp = urlopen.open(url)
        data = fp.read()
        fp.close()
        file=open(savePath + file,'w+b')
        file.write(data)
        file.close()
    except IOError:
        print "download error!"+ url
        
"""根据url下载文件,文件名自动从url获取"""
def gDownload(url,savePath):
    #参数检查,现忽略
    fileName = gGetFileName(url)
    #fileName =gRandFilename('jpg')
    gDownloadWithFilename(url,savePath,fileName)
        
"""根据某网页的url,下载该网页的jpg"""
def gDownloadHtmlJpg(downloadUrl,savePath):
    lines= gGetHtmlLines(downloadUrl)
    regx = r"""src\s*="?(\S+)\.jpg"""
    lists =gGetRegList(lines,regx)
    if lists==None: return 
    for jpg in lists:
        jpg = gGetAbslLink(downloadUrl,jpg) + '.jpg'
        gDownload(jpg,savePath)
   ###     print gGetFileName(jpg)
"""根据url取主站地址"""
def gGetHttpAddr(url):
    if url== '' : return ''
    arr=url.split("/")
    return arr[0]+"//"+arr[2]
"""根据url取上级目录"""
def gGetHttpAddrFather(url):
    if url=='' : return ''
    arr=url.split("/")
    addr = arr[0]+'//'+arr[2]+ '/'
    if len(arr)-1>3 :
        for i in range(3,len(arr)-1):
            addr = addr + arr[i] + '/'
    return addr

"""根据url和上级的link取link的绝对地址"""
def gGetHttpAddrFatherAssign(url,link):
    if url=='' : return ''
    if link=='': return ''
    linkArray=link.split("/")
    urlArray = url.split("/")
    partLink =''
    partUrl = ''
    for i in range(len(linkArray)):        
        if linkArray[i]=='..': 
            numOfFather = i + 1    #上级数
        else:
            partLink = partLink + '/'  + linkArray[i]
    for i in range(len(urlArray)-1-numOfFather):
        partUrl = partUrl + urlArray[i] 
        if i < len(urlArray)-1-numOfFather -1 : 
            partUrl = partUrl + '/'
    return  partUrl + partLink

"""根据url获取其上的相关htm、html链接,返回list"""
def gGetHtmlLink(url):
    #参数检查,现忽略
    rtnList=[]
    lines=gGetHtmlLines(url)
    regx = r"""href="?(\S+)\.htm"""
    for link in gGetRegList(lines,regx):
        link = gGetAbslLink(url,link) + '.htm'
        if link not in rtnList:
            rtnList.append(link)
            print link
    return rtnList

"""根据url,抓取其上的jpg和其链接htm上的jpg"""
def gDownloadAllJpg(url,savePath):
    #参数检查,现忽略
    gDownloadHtmlJpg(url,savePath)
    #抓取link上的jpg
    links=gGetHtmlLink(url)
    for link in links:
        gDownloadHtmlJpg(link,savePath)

"""test"""
def test():
    u='http://www.gs.xinhuanet.com/news/2007-01/31/content_9188207_1.htm'
    save='d:/tmp/'
    print 'download pic from [' + u +']'
    print 'save to [' +save+'] ...'
    gDownloadHtmlJpg(u,save)
    print "download finished"
    
test()
分享到:
评论

相关推荐

    python 抓取网页中所有图片

    python代码抓取网页中所有图片,用于网页中抓取所有图片信息。

    Python 抓取 图片 下载地址

    本篇文章将深入探讨如何使用Python来抓取并下载网络上的图片。 首先,我们需要了解的是Python中的requests库,它是处理HTTP请求的核心工具。通过requests.get()方法,我们可以向指定的URL发送请求,并获取网页的...

    python百度地图商家爬虫

    在Python编程领域,爬虫是一种常见的技术,用于自动地从互联网上抓取大量数据。"Python百度地图商家爬虫"项目就是利用Python编程语言来抓取百度地图上的商家信息,以便进行数据分析或构建自己的数据库。这个项目涉及...

    python爬虫教程系列、从0到1学习python爬虫,包括浏览器抓包,手机APP抓包,如 fiddler、mitm.zip

    Python爬虫是利用编程语言,如Python,编写程序来自动抓取互联网上的信息。它能遍历网页,提取所需数据,如文本、图片、表格等,并可以进行数据分析或存储。Python因其简洁明了的语法和丰富的库支持,成为爬虫开发的...

    使用Python3编写抓取网页和只抓网页图片的脚本

    ### 使用Python3编写抓取网页和只抓网页图片的脚本 #### 一、概述 在互联网技术快速发展的今天,网络爬虫作为一种重要的数据采集工具,被广泛应用于多个领域,如数据分析、搜索引擎优化等。本文将详细介绍如何使用...

    Python实现的爬虫程序

    总的来说,Python实现的爬虫程序能够帮助我们自动化地获取网络上的数据,这个特定的实例是针对百度图片搜索的。掌握这样的技术,不仅能够提高数据获取的效率,还可以为数据分析、图像处理等领域的工作提供便利。在...

    python抓取网页中链接的静态图片

    本文实例为大家分享了python抓取网页中链接的静态图片的具体代码,供大家参考,具体内容如下 # -*- coding:utf-8 -*- #http://tieba.baidu.com/p/2460150866 #抓取图片地址 from bs4 import BeautifulSoup import...

    一款通过网址抓网页的小软件

    标题中的“一款通过网址抓网页的小软件”指的是一个轻量级的应用程序,它的主要功能是能够根据用户提供的网址,从互联网上抓取网页内容。这种软件通常被称作网络爬虫或者网页抓取工具,它可以帮助用户自动化地获取...

    python爬虫抓去的关于腾讯招聘信息网站的数据的处理类比.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    Python自动办公实例-一键抓出PPT中的所有文字.zip

    在本实例中,"Python自动办公实例-一键抓出PPT中的所有文字.zip"是一个针对Python编程在办公自动化领域的应用,特别关注如何提取PowerPoint(PPT)文件中的全部文本内容。这一技术对于数据整理、报告分析或者内容...

    简单的Python抓taobao图片爬虫

    写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品。 从网页http://mm.taobao.com/json/request_top_list.htm?type=0&page=中提取taobao模特的照片。 复制代码 代码如下: # -*- coding: cp...

    基于Python的新浪微博用户数据获取技术.pdf

    ### Python 网络爬虫技术 #### 1. 引言 ...综上所述,基于Python的新浪微博用户数据获取技术为社交网络数据研究提供了一种有效的数据抓取解决方案,为后续的社交网络分析和大数据研究奠定了基础。

    Python入门网络爬虫之精华版

    当然也可以将验证码图片上传到打码平台上进行识别。如果不成功,可以再次更新验证码识别,直到成功为止。 参考项目:Captcha1 爬取有两个需要注意的问题: 如何监控一系列网站的更新情况,也就是说,如何进行...

    python爬虫的概要介绍与分析

    它能够自动化地从互联网上抓取大量的网页信息,并通过结构化的形式进行存储,方便后续的数据分析和处理。Python语言由于其简洁易读的语法特性以及强大的社区支持,成为了开发爬虫程序的理想选择之一。 #### 学习...

    Python爬虫抓取指定网页图片代码实例

    想要爬取指定网页中的图片主要需要以下三个步骤: (1)指定网站链接,抓取该网站的源代码(如果使用google浏览器就是按下鼠标右键 -&gt; Inspect-&gt; Elements 中的 html 内容) (2)根据你要抓取的内容设置正则表达式...

    Python爬虫获取页面所有URL链接过程详解

    在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL。 什么是Beautiful Soup? Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树...

    超详细解析python爬虫爬取京东图片

    其次就是信息过滤,出除了你需要的手机图片以外的其他信息过滤掉:可通过查看网页代码找到图片的起始以及结束的代码 爬取过程: 1)建立一个爬取图片的自定义函数,该函数负责爬取一个页面下我们想要爬取的图片,爬取...

    python制作爬虫并将抓取结果保存到excel中

    通过浏览器的开发者工具或者专门的网络抓包工具如Fiddler,我们可以观察到网页与服务器之间的交互,特别是POST请求,因为这些通常包含了动态加载的数据。 在分析拉勾网的案例中,作者发现两个关键的POST请求——`...

    python爬虫教程系列、从0到1学习python爬虫.zip

    包括浏览器抓包,手机APP抓包,如 fiddler、mitmproxy,各种爬虫涉及的模块的使用,如:requests、beautifulSoup、selenium、appium、scrapy等,以及IP代理,验证码识… 爬虫(Web Crawler)是一种自动化程序,用于...

Global site tag (gtag.js) - Google Analytics