2012-06-25 241 views
0

這是我的代碼:爲什麼我不打印和圖像

import urllib2 
from BeautifulSoup import BeautifulSoup 


soup = BeautifulSoup(urllib2.urlopen('http://www.cbssports.com/nba/draft/mock-draft').read()) 

rows = soup.findAll("table", attrs = {'class': 'data borderTop'})[0].tbody.findAll("tr")[2:] 

for row in rows: 
    fields = row.findAll("td") 
    if len(fields) >= 3: 
     anchor = row.findAll("td")[1].find("a") 
     if anchor: 
      print anchor 

,而不是打印出來的圖像,它給了我在圖像是在頁面的源代碼。任何理由爲什麼?

+2

你是什麼意思的「打印出一個圖像」和「讓我在哪裏圖像是在頁面源」? –

回答

0

看起來你想要團隊徽標縮略圖?

import urllib2 
import BeautifulSoup 

url = 'http://www.cbssports.com/nba/draft/mock-draft' 
txt = urllib2.urlopen(url).read() 
bs = BeautifulSoup.BeautifulSoup(txt) 

# get the main table 
t = bs.findAll('table', attrs={'class': 'data borderTop'})[0] 

# get the thumbnail urls 
imgs = [im["src"] for im in t.findAll('img')] if "logos" in im["src"]] 

imgs現在看起來像

[[u'http://sports.cbsimg.net/images/nba/logos/30x30/NO.png', 
u'http://sports.cbsimg.net/images/nba/logos/30x30/CHA.png', 
u'http://sports.cbsimg.net/images/nba/logos/30x30/WAS.png', 
u'http://sports.cbsimg.net/images/nba/logos/30x30/CLE.png', 

等,這些都是每一個標誌,這是所有的HTML實際上包含的文件位置;如果你想要實際的照片,你必須分別獲取每張照片。


列表中包含每個標誌重複引用;刪除重複項的最快方法是

imgs = list(set(imgs)) 

或者,該列表不包括每個團隊;如果您有完整的團隊名稱縮減列表,則可以直接構建徽標-URL列表。

另外,在網站上看,每個30x30的logo都有相應的90x90標識,您可能更喜歡 - 更大更清晰。如果是這樣,

imgs = [im.replace('30x30', '90x90') for im in imgs] 

imgs現在看起來像

[u'http://sports.cbsimg.net/images/nba/logos/90x90/BOS.png', 
u'http://sports.cbsimg.net/images/nba/logos/90x90/CHA.png', 
u'http://sports.cbsimg.net/images/nba/logos/90x90/CLE.png', 
u'http://sports.cbsimg.net/images/nba/logos/90x90/DAL.png', 


現在,每個網址,我們下載的圖片,並將其保存:

import os 

savedir = 'c:\\my documents\\logos' # assumes this dir actually exists! 
for im in imgs: 
    fname = im.rsplit('/', 1)[1] 
    fname = os.path.join(savedir, fname) 
    with open(fname, 'wb') as outf: 
     outf.write(urllib2.urlopen(im).read()) 

,你有你的標誌。