我对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'
但这只给出了标题,而不是图像来源 有什么不对吗?
修改 我已经编辑了我的源代码,仍然无法获取图片网址。
答案 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']
这对我有用。希望它有所帮助。