屏幕抓图(即Firefox页面信息/谷歌图片)

时间:2012-06-03 01:31:36

标签: python image firefox screen-scraping google-shopping-api

最好使用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文档中找不到Firefox工具......有什么方法可以检索这个 没有浏览Firefox页面信息的路径?或许也可以通过 Python和/或Javascript / JQuery?
  2. 我正在尝试以“橙色”显示产品的照片,并注意页面始终默认加载黑色
  3. 一个工作示例可能是谷歌“购物”,如果您输入此产品的名称并选择颜色,图像将以正确的颜色(来自完全相同的页面)显示在搜索结果中。

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

    选择正确的颜色看起来更复杂,在这种情况下,我现在只能选择黑色的主要产品图片。

    到目前为止,我已经尝试过选择基于img高度标签的图片,并尝试在没有高度/宽度标签的情况下阅读尺寸......但是我想到了必须有更好的方法。

1 个答案:

答案 0 :(得分:-1)

这可能有点复杂,但在这种特殊情况下工作的大部分解决方案几乎都是一样的。

首先,让我告诉你为什么使用Beautiful Soup或xlml不起作用。您需要检索一些仅在您点击橙色包缩略图后才可用的信息,对吗?这是使用Javascript加载的,因此Orange Soup和朋友无法使用橙色包图像(因为它们不会解析Javascript,也不会解析在解析树中不存在的元素)。 这就是死亡结束。

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

更简单的解决方案是使用PhantomJs。它与Selenium类似,但正如其名称所示,您通过Javascript提供说明(由于您已经在处理Web元素,因此可能会更加舒适)。我建议您使用CasperJSIt 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

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

顺便提一下,让我提醒您,通常需要获得许可来检索这类东西。

希望有所帮助。