从页面获取特定图像
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']
这对我有用。希望对你有帮助。
我是 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']
这对我有用。希望对你有帮助。