2016-04-20 60 views
1

我想用Bueatiful湯提取圖片的寬度和高度。所有照片擁有相同的代碼格式:美麗的湯:從html獲取圖片尺寸

<img src="http://somelink.com/somepic.jpg" width="200" height="100"> 

我可以

for pic in soup.find_all('img'): 
    print (pic['src']) 

for pic in soup.find_all('img'): 
    print (pic['width']) 

工作不用於提取尺寸方便地提取的鏈接。我錯過了什麼?

編輯: 頁面中的圖片之一沒有在html代碼中的寬度和高度。在最初的帖子發佈時沒有注意到這一點。因此,任何解決方案必須考慮到這一點

回答

1

類似於字典的屬性訪問應widthheight工作,以及,如果指定了他們。你可能會遇到沒有明確設置這些屬性的圖像 - 在這種情況下,你的當前代碼會拋出一個KeyError。您可以使用get()並提供一個默認值,而不是:

for pic in soup.find_all('img'): 
    print(pic.get('width', 'n/a')) 

或者,你可以找到只有img是有widthheight指定的元素:

for pic in soup.find_all('img', width=True, height=True): 
    print(pic['width'], pic['height']) 
+0

有一張沒有明確寬度和高度的圖片,但是'get()'返回'None'沒有特定的圖片 –

+0

@horace_vr當然,如果寬度沒有設置,'pic.get('width')'會返回'None'。與'pic ['width']'的情況下'KeyError'相反。 – alecxe

1

它的工作原理有點不同,讓其他屬性

for pic in soup.find_all('img'): 
    print(pic.get('width')) 
1

試試這個:

>>> html = '<img src="http://somelink.com/somepic.jpg" width="200" height="100">' 
>>> soup = BeautifulSoup(html) 
>>> for tag in soup.find_all('img'): 
...  print tag.attrs.get('height', None), tag.attrs.get('width', None) 
... 
100 200 

你可以使用attrs方法,它返回一個字典,鍵作爲標籤的屬性和值作爲標籤值。