【问题标题】:getting specific images from page从页面获取特定图像
【发布时间】:2015-08-24 06:17:52
【问题描述】:

我对@9​​87654322@ 很陌生。我正在尝试从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'

但这仅给出标题,而不是图像源 有什么问题吗?

编辑: 我已经编辑了我的来源,仍然无法获取图片网址。

【问题讨论】:

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


    【解决方案1】:

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

    div.find('img')
    

    并发现他们在属性名称 src2 中发送源,所以以下应该可以工作 -

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

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

    【讨论】:

    • 谢谢!也很有趣。您如何知道他们发送的源名称为src2
    • 正如我所说,我尝试了print div.find('img'),它打印了 img 标签的整个 html。
    【解决方案2】:

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

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

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

      李>
    • 使用selenium 自动化真正的浏览器 - 停留在高级别的地方。换句话说,您不关心结果是如何检索的,发出了什么请求,需要执行什么 javascript。您只需等待搜索结果出现并提取它们。

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

    【讨论】:

    • 感谢您的回答,第一个(限制问题)和第三个(工作 - 但阻塞问题)已尝试。不确定第2个。如果您分享您的知识并让我知道哪个更可靠且寿命更长,我将不胜感激
    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多