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 )

相互に関連する 2 つの問題:

  1. ソースを表示すると、Firefox ツールから取得した画像パスが html ドキュメントに見つかりません... Firefox ページ情報を経由せずにこのパスを取得する方法はありますか? おそらく、Python および/または Javascript/JQuery のいずれかを介してですか?
  2. 製品の写真を「オレンジ」で取得しようとしていますが、ページがデフォルトで常に黒色をロードしていることに気付きました

実際の例はおそらく Google の「ショッピング」です。この製品の名前を入力して色を選択すると、検索結果に (まったく同じページから) 正しい色で画像が表示されます。

基本的に、主にショッピング サイトから色やスタイル/バリエーション固有の画像をスクレイピングできるようにしたいと考えています。

適切な色を選択するのはもっと複雑に思えます。その場合、私は今のところメインの製品画像だけを黒に落ち着かせます..

これまでのところ、img の高さタグに基づいて画像を選択しようとしましたが、高さ/幅のタグがない場合は寸法を読み取ろうとしましたが、もっと良い方法があるはずです。

4

1 に答える 1

-1

これは少し複雑になる可能性がありますが、この特定の状況で機能するソリューションのほとんどはほとんど同じです。

まず、BeautifulSoupまたはxlmlの使用が機能しない理由を説明します。オレンジ色のバッグのサムネイルをクリックした後にのみ利用できる情報を取得する必要がありますよね?これはJavascriptを使用して読み込まれるため、Beautiful Soupやその友人はオレンジ色のバッグの画像を利用できません(Javascriptや、解析されたツリーに存在しない要素を解析しないため)。これが死の終わりです。

ただし、 SeleniumやPhantomJSのような他の画面スクレイピングツールがあります。私は両方をテストし、うまく機能しました。それらは基本的にブラウザを統合しているので、明らかにjavascriptを管理することができます。これをサーバーから自動的にスクレイピングする必要があるのか​​、それともスクレイピングプロセスを自由に開始したいのかわかりません。Seleniumを使用すると(開きたいページ、クリックしたい要素などを指定した後)、ブラウザーがすべてのことを単独で実行していることがわかります。ヘッドレスブラウザの使用など、利用可能な他のオプションがあります。私の意見では、それは非常に強力ですが、それを機能させるにはかなり複雑になる可能性があります。

はるかに簡単な解決策は、PhantomJを使用することです。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

そこには、タスクを実行するために必要なもののほとんどがあります。

ちなみに、通常、そのようなものを取得するには許可を求める必要があることを思い出させてください。

お役に立てば幸いです。

于 2012-06-03T02:19:29.607 に答える