2

最好使用给定 URL 的 python(当前使用 urllib 和 BeautifulSoup)。

例如,我正在尝试抓取此页面上的主要照片: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. 我正在尝试以“橙色”获取产品照片,并注意页面默认始终加载黑色

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

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

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

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

4

1 回答 1

-1

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

首先,让我告诉你为什么使用 Beautiful Soup 或 xmlml 不起作用。您需要检索一些只有在单击橙色包缩略图后才可用的信息,对吧?这是使用 Javascript 加载的,因此 Beautiful 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

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

顺便说一句,让我提醒您,通常需要获得许可才能检索此类内容。

希望有帮助。

于 2012-06-03T02:19:29.607 回答