屏幕抓取图像(即.火狐页面信息/谷歌图片)



最好使用python(目前使用urllib和BeautifulSoup)给定一个URL。

例如,我正在尝试抓取此页面上的主要照片:http://www.marcjacobs.com/marc-jacobs/womens/bags-and-accessories/c3122001/the-single#?p=1&s=12

在Firefox中的"工具">"页面信息"下,>媒体列出了所有可见图像,包括指向我要抓取的图像的链接(http://imagesec.mj.ctscdn.com/image/336/504/6ace6aac-c049-4d7e-9465-c19b5cd8e4ac.jpg)

两个相互关联的问题:

  1. 如果我做一个视图源,从在 html 文档中找不到火狐工具...有什么方法可以检索到这个路径而不通过火狐页面信息?也许通过Python 和/或 Javascript/JQuery?
  2. 我正在尝试获取"橙色"中的产品照片,并注意到默认情况下页面始终加载黑色

一个工作示例可能是Google"购物",如果您输入此产品的名称并选择颜色,则图像将以正确的颜色(来自完全相同的页面)显示在搜索结果中。

基本上,我希望能够从大多数购物网站上抓取颜色和样式/变体特定的图像。

选择正确的颜色似乎更复杂,在这种情况下,我现在只满足于黑色的主要产品图像。

到目前为止,我已经尝试根据 img 高度标签选择图像,并在没有高度/宽度标签时尝试读取尺寸......但我突然想到,必须有更好的方法。

这可能有点复杂,但在这种特定情况下有效的大多数解决方案几乎相同。

首先,让我告诉你为什么使用美丽汤或xlove我的生活是行不通的。您需要检索一些只有在单击橙色袋缩略图后才能使用的信息,对吗?这是使用 Javascript 加载的,因此 Beautiful Soup 和朋友无法使用橙色袋子图像(因为他们不解析 Javascript,也不解析解析树中不存在的元素)。所以这是一个死亡的结局。

但是,还有其他屏幕抓取工具,例如Selenium或PhantomJS。我已经测试了两者并且工作得很好。他们基本上集成了一个浏览器,所以他们显然能够管理javascript。我不知道您是否需要从服务器中自动抓取它,或者您想随意开始抓取过程。使用Selenium(在你告诉它你想打开哪个页面,你想点击什么元素等之后),你会看到你的浏览器自己做所有这些事情。还有其他可用的选项,例如使用无头浏览器。在我看来,它非常强大,但要让它工作可能会变得非常复杂。

一个更简单的解决方案是使用PhantomJs。它类似于Selenium,尽管顾名思义,您可以通过Javascript给出指令(这可能会更舒适,因为您已经在处理Web元素)。我建议你使用CasperJS: It eases the process of defining a full navigation scenario and provides useful high-level functions, methods & syntactic sugar for doing common tasks...

让我给它看一下它的样子:

casperFunction = function(){
    var casper = require('casper').create({
        verbose: true
    });
    casper.start('yourwebpage'); // loading the webpage
    casper.then(function(){ // after loading...
        casper.evaluate(function(){ // get me some element's value
            document.getElementById('yourelement').value
        });
    });
    casper.then(function(){ // after that, click on this other element
        this.click('#id_of_other_element');
    })
    casper.wait(7000); // wait for some processing... this can be quite 
                       // useful if you need to wait a few seconds in 
                       // order to retrieve your orange bag later
    casper.run(); // actually runs the whole thing

在那里,您拥有完成任务所需的大部分内容。

顺便说一下,让我提醒你,通常需要请求许可才能检索这种东西。

希望有帮助。

最新更新