从页面获取特定图像

时间:2015-06-09 12:19:48

标签: python html web-scraping beautifulsoup html-parsing

我对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'

但这只给出了标题,而不是图像来源 有什么不对吗?

修改 我已经编辑了我的源代码,仍然无法获取图片网址。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

Bing正在使用一些技术来阻止自动裁剪程序。我试着打印

div.find('img')

并发现他们在属性名称src2中发送源代码,因此后续工作 -

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

这对我有用。希望它有所帮助。