2013-01-09 30 views
0

我正在写一个给定http地址的小程序,它会查找并下载其中的图像。我现在的情况是这样的:使用urllib2查找和下载网站的图像

import urllib2, html 

class HTMLNode(object): 
    def __init__(self,tag,attr,content,closed=True): 
     self.tag = tag 
     self.attr = attr 
     self.content = content 
     self.closed = closed 

    def istext(self): 
     return self.tag == '_text_' 

    def tostring(self): 
     if self.istext(): 
      return self.content 
     ret = '<'+self.tag 
     for k, v in self.attr.items(): 
      ret += ' '+k+'="'+v+'"' 
     ret += '>' 
     if self.closed: 
      for c in self.content: 
       ret += c.tostring() 
      ret += '</'+self.tag+'>' 
     return ret 

    def find_by_tag(self,tag): 
      ret = [] 
      if self.tag == tag: ret += [self] 
      if not self.istext(): 
       for c in self.content: 
        ret += c.find_by_tag(tag) 
      return ret 

def imagegrab(url): 
    req = urllib2.Request(url) 
    response = urllib2.urlopen(req) 
    output = open(url, 'wb') 
    output.write(response.read()) 

缺少的环节是找到一种方法来使用HTMLNode类的“find_by_tag”功能,使程序将扫描的“”标签,并从网站上下载的图片。有人可以帮助我吗?

+1

你用Python 3标记了这个,但是使用'urllib2'(一个Python 2 stdlib库)。标记错误或者您正在使用'urllib'。 :-) –

+0

我正在使用Python3 _and_ urllib2,我从来没有遇到任何问题! – test123

+0

来自Python 2 ['urllib2'文档](http://docs.python.org/2/library/urllib2.html):* urllib2模块已经在Python 3中的几个模块中分割,名为'urllib。 request'和'urllib.error'。*对不起,不好意思,但* python 3 *中没有'urllib2'。 –

回答

2

其他人已经为你做了这项工作。具体来说,请看BeautifulSoup,这是一个Python的HTML解析库。你会这样做

soup = bs4.BeautifulSoup(...) 
for img in soup("img"): 
    print img.src 

或类似;显然,图书馆比这更强大。

你也可以考虑使用requests,它是一个包含一个简单的API的urllib系列库的包装器。为此,你会做

soup = bs4.BeautifulSoup(requests.get(url).text) 
+0

谢谢,但我需要使用urllib2,因为它已经预装了。 – test123

+0

@ test123--为什么需要预先安装,不能用标准库解析html。 – root

+0

@root [其实,你可以](http://docs.python.org/3.0/library/html.parser.html) - 虽然BeautifulSoup有更多的理由。 – katrielalex