使用BeautifulSoup从URL获取图像

Lon*_*oul 0 python url urllib beautifulsoup web-scraping

我正在尝试从Wikipedia页面获取重要图像,而不是缩略图或其他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"})
Run Code Online (Sandbox Code Playgroud)

另外,如果有人可以通过查看网页中的“源元素”来详细说明如何使用findAll。那太好了。

ale*_*cxe 5

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
...
Run Code Online (Sandbox Code Playgroud)

或者,甚至可以使用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 
...
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)