5

我的代码只返回一个空字符串,我不知道为什么。

import urllib2

def getImage(url):
    page = urllib2.urlopen(url)
    page = page.read() #Gives HTML to parse

    start = page.find('<a img=')
    end = page.find('>', start)

    img = page[start:end]

return img

它只会返回它找到的第一张图片,所以它不是一个很好的图片抓取工具;也就是说,我现在的主要目标只是能够找到图像。我做不到。

4

5 回答 5

2

考虑使用BeautifulSoup来解析您的 HTML:

from BeautifulSoup import BeautifulSoup
import urllib
url  = 'http://www.google.com'
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
for img in soup.findAll('img'):
     print img['src']
于 2012-10-17T15:04:10.650 回答
2

您应该为此使用一个库,并且那里有几个,但是通过更改您向我们展示的代码来回答您的问题...

您的问题是您正在尝试查找图像,但图像不使用<a ...>标签。他们使用<img ...>标签。这是一个例子:

<img src="smiley.gif" alt="Smiley face" height="42" width="42">

您应该做的是将您的start = page.find('<a img=')行更改为start = page.find('<img ')

def getImage(url):
    page = urllib2.urlopen(url)
    page = page.read() #Gives HTML to parse

    start = page.find('<img ')
    end = page.find('>', start)

    img = page[start:end+1]
    return img
于 2012-10-17T15:00:10.450 回答
0

一些可能有帮助的说明:

  1. 使用谷歌浏览器。将鼠标放在图像上并单击鼠标右键。选择“检查元素”。这将打开一个部分,您可以在其中看到图像附近的 html。

  2. 使用 Beautiful Soup 解析 html:

    from BeautifulSoup import BeautifulSoup
    
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    html = response.read()
    soap = BeautifulSoap(html)
    imgs = soup.findAll("img")
    items = []
    for img in imgs:
        print img['src'] #print the image location
        items.append(img['src']) #store the locations for downloading later
    
于 2012-10-17T15:08:30.887 回答
0

关于使用 ruby​​ 进行屏幕抓取的文章: http ://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/ 它不是抓取图像,但它是一篇好文章,可能会有所帮助。

于 2012-10-17T14:57:12.013 回答
0

以这种方式提取图像信息并不是一个好主意。根据您的知识和学习新事物的动机,有几个更好的选择:

于 2012-10-17T14:59:57.503 回答