如果我使用美味的汤,我怎么能得到所有的图像?

时间:2013-11-24 07:02:28

标签: python html-parsing beautifulsoup

如果像这样的代码,我如何才能获得图像:

<div class="galery-images">
<div class="galery-images-slide" style="width: 760px;">
<div class="galery-item galery-item-selected" style="background-image: url(/images/photo/1/20130206/30323/136666697057736800.jpg);"></div>

我想得到136666697057736800.jpg 我写道:

 images = soup.select("div.galery-item")

我得到一份清单:

[<div class="galery-item galery-item-selected" style="background-image: url(/images/photo/1/20130206/30323/136666697057736800.jpg);"></div>, 
<div class="galery-item" style="background-image: url(/images/photo/1/20130206/30323/136013892671126300.jpg);" ></div>, 
<div class="galery-item" style="background-image: url(/images/photo/1/20130206/30323/136666699218876700.jpg);"></div>]

我不明白:我怎么能得到所有图像?

2 个答案:

答案 0 :(得分:0)

Use regex or a css parser to extract the url,将主机连接到URL的开头,最后下载这样的图像。

import urllib

urllib.urlretrieve("https://www.google.com/images/srpr/logo11w.png", "google.png")

答案 1 :(得分:0)

为了让您的生活更轻松,您应该使用正则表达式:

urls = []

for ele in soup.find_all('div', attrs={'class':'galery-images-slide'}):
    pattern = re.compile('.*background-image:\s*url\((.*)\);')
    match = pattern.match(ele.div['style'])
    if match:
        urls.append(match.group(1))

这可以通过查找属于父div的所有divs(具有类:'galery-images-slide')来实现。然后,您可以使用正则表达式解析子divs以查找包含样式(其本身包含background-url)的任何内容。

因此,从上面的示例中,这将输出:

[u'/images/photo/1/20130206/30323/136666697057736800.jpg']

现在,要下载指定的图片,请在网址前附加网站名称,然后您就可以下载了。

注:

除了re之外,这需要Python中的正则表达式模块(BeautifulSoup)。 而且,我使用的正则表达式非常天真。但是,您可以根据需要调整此值。