我正在尝试从维基百科页面获取重要图像而不是缩略图或其他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。那将是非常棒的。
答案 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')