使用BeautifulSoup从URL获取图像

时间:2014-06-23 01:19:53

标签: python url web-scraping beautifulsoup urllib

我正在尝试从维基百科页面获取重要图像而不是缩略图或其他GIF,并使用以下代码。然而,“img”的长度为“0”。关于如何纠正它的任何建议。

代码:

import urllib
import urllib2
from bs4 import BeautifulSoup
import os

html = urllib2.urlopen("http://en.wikipedia.org/wiki/Main_Page")

soup = BeautifulSoup(html)

imgs = soup.findAll("div",{"class":"image"})

此外,如果有人可以通过查看网页中的“源元素”来详细解释如何使用findAll。那将是非常棒的。

2 个答案:

答案 0 :(得分:4)

页面上的a代码有一个image类,而不是div

>>> img_links = soup.findAll("a", {"class":"image"})
>>> for img_link in img_links:
...     print img_link.img['src']
... 
//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Stora_Kronan.jpeg/100px-Stora_Kronan.jpeg
//upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Christuss%C3%A4ule_8.jpg/77px-Christuss%C3%A4ule_8.jpg
...

或者,更好的是,使用a.image > img CSS selector

>>> for img in soup.select('a.image > img'):
...      print img['src']
//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Stora_Kronan.jpeg/100px-Stora_Kronan.jpeg
//upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Christuss%C3%A4ule_8.jpg/77px-Christuss%C3%A4ule_8.jpg 
...

UPD(使用urllib.urlretrieve下载图像):

from urllib import urlretrieve
import urlparse
from bs4 import BeautifulSoup
import urllib2

url = "http://en.wikipedia.org/wiki/Main_Page"
soup = BeautifulSoup(urllib2.urlopen(url))
for img in soup.select('a.image > img'):
    img_url = urlparse.urljoin(url, img['src'])
    file_name = img['src'].split('/')[-1]
    urlretrieve(img_url, file_name)

答案 1 :(得分:1)

我没有在该页面上看到任何带有“图像”类的div标签。

你可以获得所有的图片标签并丢弃那些小图片标签。

imgs = soup.select('img')