从页面获取特定图像

getting specific images from page

我是 BeautifulSoup 的新手。我正在尝试打印来自 http://www.bing.com/images?q=owl:

的图像链接
redditFile = urllib2.urlopen("http://www.bing.com/images?q=owl")
redditHtml = redditFile.read()
redditFile.close()

soup = BeautifulSoup(redditHtml)

productDivs = soup.findAll('div', attrs={'class' : 'dg_u'})
for div in productDivs:
    print div.find('a')['t1']  #works fine
    print div.find('img')['src'] #This getting issue KeyError: 'src'

但这只给出了标题,没有给出图片来源 有什么问题吗?

编辑: 我已经编辑了我的来源,仍然无法获取图像 url。

如果您打开浏览器开发工具,您会看到向 http://www.bing.com/images/async 端点发出了一个额外的异步 XHR 请求,其中包含图像搜索结果。

这导致您有 3 个主要选项:

  • 在您的代码中模拟该 XHR 请求。你可能想使用比 urllib2 更适合人类的东西;参见 requests module。这将是所谓的 "low-level" 方法,深入到裸机和网站特定的实现,这将使该选项不可靠、困难、"heavy"、错误提示和脆弱

  • 使用 selenium 使真正的浏览器自动化 - 保持高水平。换句话说,你不关心结果是如何检索的,发出了什么请求,需要执行什么javascript。您只需等待搜索结果出现并提取它们。

  • 使用Bing Search API(这应该是选项#1)

Bing 正在使用一些技术来阻止自动抓取工具。我试着打印

div.find('img')

发现他们在属性名称 src2 中发送源,所以下面应该有效 -

div.find('img')['src2']

这对我有用。希望对你有帮助。