2013-01-09 41 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