0

Javascript構造を使用してデータをロードするWebサイトからデータを取得しようとしています。私はこの質問の解決策を使用して、美しいスープを使用してデータをスクレイピングしながらhtmlタグを使用してそれを達成しました。その後、JSONデータディクショナリを取得し、デバイス名と価格データを正常に取得するためにそれを繰り返しました。

上記の質問の解決策で言及されているコードは、実際には、コードで言及されている属性を持つデバイス名と価格を持つウィンドウからデータを抽出していますwindow.rates

問題:ウェブサイトの構造を見ると、3つの部分があります。

  1. 最初の部分には、プラン名とその他の詳細が記載されたウィンドウが含まれています
  2. 2番目の部分には、デバイス名と価格のウィンドウが含まれています(これは現在データをスクレイピングしているウィンドウです)
  3. 第3部には、プラン名、デバイス名、価格、およびその月額料金が含まれています

4つのフィールド(プラン名、デバイス名、価格、月額)すべてが必要なので、3番目の部分からデータを抽出したいと思います。ただし、上記の質問の解決策を使用して、第1部と第2部からデータを取得することができます。

現在、3番目の部分のデータをロードしているjavascriptが見つかりません。また、3番目の部分のデータのJSONディクショナリを取得するために使用する必要がある属性(たとえば、2番目の部分のwindow.rates)も見つかりません。

また、ウェブサイトの第3部のデータは、第2部のウィンドウをスクロールすると変化します。

PS:ページで実行されているすべてのスクリプトを印刷して、第3部のデータをロードしているスクリプトを見つけようとしましたが、役に立ちませんでした。

この問題を解決するのを手伝ってください。

4

1 に答える 1

0

興味のあるサイトについて言及している以前の質問へのリンクを提供しました。

http://www.vodafone.de/privat/tarife/red-smartphone-tarife.html

あなたはただコードを見る必要があります。

プランとして「RedM」を選択し、「Samsung Galaxy SIII Blau(Blue)/16GB」を選択するとします。下部のセクションには次のように表示されます。

詳細項目

Einmalige Kosten(1回限りの費用)

  1. Anschlusspreis(アクティベーション料金):29.99
  2. Einmalzahlung(一括払い)スマートフォン:9.90

    Monatliche Kosten(月額料金)

  3. レッドM59.99

  4. 24 x 10%Rabatt(割引)-6.00
  5. 24x5ユーロスマートフォン-Rabatt-5.00

  6. また、学生、若者、または障害者のために、3つの10.00/月割引の1つを利用できます。

これらのJavaScript割り当てを(おそらくPythonのJSONモジュールを使用して)解析する必要があります。

window.phones
window.rates
window.discounts
window.goodies
window.promotions

データ構造について説明します。コードは自分で作成する必要があります。

windows.phones、このエントリが含まれています(この例を維持):

window.phones = {
    sku1224225:{
        name:"Samsung Galaxy SIII Blau 16 GB",
        image:"/images/m1057472_300599.jpg",
        deliveryTime:"Lieferbar innerhalb 48 Stunden",
        sku1444275:{p:"prod1334441",e:"49.90"}, // "Vodafone Red S"
        sku1444283:{p:"prod1334441",e:"9.90"},  // "Vodafone Red M"
        sku1444291:{p:"prod1334441",e:"9.90"},  // "Vodafone Red Premium"
        sku1444286:{p:"prod1334441",e:"9.90"},  // "Vodafone Red L"
        sku1104261:{p:"prod1334441",e:"99.90"}  // "Vodafone Basic 100"
    },
    // . . .
}

プラン名を表示するコメントを追加しました。

ここに詳細項目2があります。

ここにリストされているSKUは、で定義されているプラ​​ンサブSKUwindow.ratesです。「RedM」には次のものがあります。

window.rates = {
    sku1444279:{
        label:"Vodafone Red M",
        propId:"prod1564453",
        subsku:{
            sku1444283:{    // "Samsung Galaxy SIII Blau 16 GB", etc.
                monthlyChargest:"59.99",
                activationCharge:"29.99",
                discounts:[
                    "sku140988",    // "Ich bin 18-25 Jahre jung" (-10)
                    "sku140989",    // "Ich habe einen Schwerbehindertenausweis" (-10)
                    "sku140990"     // "Ich bin Student und jünger als 30" (-10)
                ],
                promotions:["27"],  // "24 x 5 Euro Smartphone-Rabatt" (-5)
                Goodies:[
                    "prod1674486"   // "24 x 10 % Rabatt" (-6)
                ]
            },
            // more subskus here . . .
        }
    },
    // . . .
}

ここでも、リンクトデータにコメントを追加しました。多くのデバイスが同じサブスクにリンクできることに注意してください。

詳細項目1と3、および項目4、5、6へのリンクが表示されます。

Goodieswindows.goodies経由prod番号へのリンク:

window.goodies = {
    prod1674486:{
        SkuId:"prod1674486",
        Name:"24 x 10 % Rabatt",
        Value:"-6",
        Type:"absolute",
        DurationInMonth:"24"
    },
    // . . .
}

これで詳細項目4が得られます。

window.ratesまた、のリストをwindows.promotions介してリンクします。subskupromotions

window.promotions = {
    27:{
        promotionId:"27",
        promotionName:"24 x 5 Euro Smartphone-Rabatt",
        promotionValue:"-5",
        Type:"absolute",
        duration_in_months:"24",
        deeplinkParameter:""
    },
    // . . .
}

これで詳細項目5が得られます。

windows.discounts詳細アイテム6の特別割引が含まれています。

window.discounts = {
    sku140988:{
        SkuId:"sku140988",
        Name:"Ich bin 18-25 Jahre jung",
        Type:"absolute",
        DurationInMonth:"24",
        Value:{
            sku1444295:"-10",   // "Vodafone Red Premium"
            sku1444279:"-10",   // "Vodafone Red M"
            sku1444290:"-20"}   // "Vodafone Red L"
    },
    sku140989:{
        SkuId:"sku140989",
        Name:"Ich habe einen Schwerbehindertenausweis",
        Type:"absolute",
        DurationInMonth:"24",
        Value:{
            sku1444295:"-10",   // "Vodafone Red Premium"
            sku1444279:"-10",   // "Vodafone Red M"
            sku1444290:"-20"}   // "Vodafone Red L"
    },
    sku140990:{
        SkuId:"sku140990",
        Name:"Ich bin Student und jünger als 30",
        Type:"absolute",
        DurationInMonth:"24",
        Value:{
            sku1444295:"-10",   // "Vodafone Red Premium"
            sku1444279:"-10",   // "Vodafone Red M"
            sku1444290:"-20"}   // "Vodafone Red L"
    }
};

適切な割引額は、プランの主要なSKUによって選択されます(以下にリストされているSKUを介してvalue)。

以上です。これらの5つのオブジェクトをPythonオブジェクトに解析するだけで、必要なすべてのデータが得られます。

于 2013-01-10T18:54:22.930 に答える