2017-07-05 17 views
0

2ページからのjsonレスポンスを統合しようとしています。Scrapy Json 2ページからの応答

口コミから:https://appworld.blackberry.com/cas/content/2360?countryid=100&lang=en&callback=_content_2360&_=1499177414482

JSON辞書構造:

1){ "カテゴリ":[{ "productTypeId":1、 "nrOfResults":0から https://appworld.blackberry.com/cas/content/2360/reviews/2.17.2?page=1&pagesize=50000&sortby=newest&callback=_content_2360_reviews_2_17_2&_=1499161778751

および説明、 "id":81}]、 "packageId": "gYABgD934jlePGCrd74r6jbZ7jk"、 "iconId":77644、 "vendorId":954、 "supportedCountries":[] 、 "supportedCarriers":[]、 "parentId":null、 "description": "WhatsAppはBlackBerryで利用できるクロスプラットフォームのスマートフォンメッセンジャーです®と他の4つの主要な携帯電話。 WhatsApp Messengerは、既存のインターネットデータプランを利用して、友人、同僚、家族と連絡をとることができます。初年度は無料! ($ 0.99 /年後)\ n \ nバージョン2.11.2355:\ n * WhatsApp Webの紹介:コンピュータ’のブラウザからWhatsAppメッセージを送受信できるようになりました。まず、ご使用のコンピュータのweb.whatsapp.comにアクセスしてください。 \ n *バグの修正などの改善\ n \ nバージョン2.11.1638:画像や動画にキャプションを追加\ n *すべてのチャットをすばやくアーカイブする:設定 - メディア設定\ n * n *バグ修正\ n \ nバージョン2.11.900:\ n *チャットをアーカイブして、チャットリストからチャットを非表示にできるようになりました。 \ n *いくつかの携帯電話では写真を拡大する方が優れています。\ n *さまざまなバグの修正と改善。\ n \ n --------------- \ n *プライバシー設定:あなたの最後に見た、プロフィールの写真、ステータス。\ n \ n *音声メッセージ:プッシュツートークスタイルの機能でボイスメッセージを交換できます。 WhatsAppのすべてのお友達とこのウォーキートーキーのような機能をお楽しみください。 \ n \ n *ブロードキャストリスト:ブロードキャストリストは、単一のチャットメッセージを送信するのと同じくらい簡単に複数の受信者にブロードキャストメッセージを送信できるメッセージ受信者の保存リストです。 \ n \ n *大きなサムネイル:大きなサムネイルを使用すると、チャット画面から画像を詳細に表示してスクロールできます。 \ n \ n *マルチメディア:友人や連絡先にビデオ、画像、音声を送信します。 \ n \ n * GROUP CHAT:あなたの連絡先とのグループの会話をお楽しみください。 \ n \ n * AWESOME。あなたと連絡先がWhatsApp Messengerをインストールしたら、それを使ってお互いにメッセージを送信できます。あなたの友人に1日に100万件のメッセージを送信してください! WhatsAppは3G/EDGEインターネットデータプラン(または利用可能な場合はWi-Fi)を使用します。\ n \ n * CROSSプラットフォーム。はい、BlackBerry以外のデバイスで友人にメッセージを送信したり、写真、ビデオ、位置、音声を追加したりすることができます。 \ n \ n *国際料金はありません。他の国のお友達とチャットするには、WhatsAppがBlackBerry ®にインストールされている必要があります。国際的なSMS費用を避けてください。 \ n \ n *ピンまたはユーザ名はありません。まだ別のPINやユーザー名を覚えていなければならないのはなぜですか? WhatsAppはSMSのように動作し、電話番号で動作し、デバイスのアドレス帳と統合されます。 \ n \ n *追加する必要はありません。あなたのアドレス帳は自動的にあなたの連絡先にあなたを接続するために使用されます。 WhatsAppの友達が自動的に[お気に入り]メニューに表示されます。 \ n \ n *オフラインメッセージ。あなたのデバイスの電源を切っても、カバレッジエリア外に行っても、WhatsAppはメッセージをオフラインで保存し、ネットワークカバレッジが復元されたときやデバイスが再びオンになったときにメッセージを取得します。 \ n \ n *その他多くの機能:連絡先のブロック、共有場所の共有、カスタム通知音、チャット履歴の電子メール、電話番号の変更など\ n \ n *無料トライアル。無料試用版として初年度全体をお楽しみください! 、 "ratingAntValue":6、 "contentAvailableAfterFiltering":true、 "vendorHomeUrl": "http://www.whatsapp.com"、 "vendorSupportEmail": "[email protected]"、 " "//content/2360"、 "vendorName": "WhatsApp Inc。"、 "nrOfReviews":570023、 "NetscapePricyURL": "http://blog.whatsapp.com/ads"、 "スクリーンショット":[538259,538260,538261,538262,538264]、 "_ itemDetailsLink" "featuresDescription": "WhatsApp Messenger"、 "featuredIconId":538258、 "nrOfApprovedReviews":570023、 "rowNumber":null、 "nameLength":18、 "shortDescriptionLength":18、 "orderColumn":null、 "licenses":[ 1、 "licenseModelType":1、 "pricingtierId":null、 "renewalPricintTierId":null、 "renewalPrice":null、 "accessDuration":null、 "licenseModelType":null、 "initialRenewalPeriod" "price":0、 "renewalPriceString":null、 "purchaseAmountOfUnits":null、 "purchaseUnitType":null}]、 "cdDTO":{"price":0。0、 "releaseDate":1498436270442、 "compatableContent":false、 "supportedDevices":["8220"、 "8230"、 "8230f"、 "8330"、 "8350i"、 "8520"、 "8530"、 "8900" 「9310」、「9310」、「9315」、「9320」、「9330」、「9350」、「9310」、「9310」、「9310」、 「9320」、「9520」、「9530」、「9550」、「9620」、「9630」、「9650」、「9670」、「9700」、「9720」、 "9880"、 "9800"、 "9900"、 "9930"、 "9981"、 "BlackBerry Classic"、 "BlackBerry Leap" 「BlackBerry Passport」、「BlackBerry Passport Silver Edition」、「BlackBerry Q10」、「BlackBerry Q5」、「BlackBerry Z3」、「BlackBerry Z30」、「Imagination GPU」、「Porsche Design P9982」、「Porsche Design P9983」、 「Qualcomm GPU」、「Qualcomm GPU VZW」、「supportedDevicesToDisplay」:「8220」、「8230」、「8230f」、「8330」、「8350i」、「8520」、「8530」、「8900」、 「9310」、「9320」、「9320」、「9330」、「9350」、「9360」、「9310」、「9310」、「9310」、 「9320」、「9520」、「9530」、「9550」、「9620」、「9630」、「9650」、「9670」、「9700」、「9720」、 「9780」、「9788」、「9790」、「9800」、「9810」、「9850」、「9860」、「9900」、「9930」、「9981」、「BlackBerry Classic」、「Blac 「BlackBerry Q9」、「BlackBerry Q5」、「BlackBerry Z10」、「BlackBerry Z3」、「BlackBerry Z30」、「Porsche Design P9982」、「Porsche Design」 "、" supportCountries ":[]、" bb10MinOs ":" 10.0.10 "、" bbosMinOs ":" 5.0.0 "、" supportedCarriers ":[]、" playbookMinOs ":null、" bbosSpecificMinOs ":" 5.0 "このアイテムは10代の視聴者を対象としており、次のものが含まれている可能性があります:\ n "軽度またはそれほど頻繁ではありません。\ n"、 "bb10SpecificMinOs":null、 "playbookSpecificMinOs":null、 "ratingDescriptionName": "Teen"、 "ratingDescriptionDescription"漫画、ファンタジー、現実的な暴力などがあります。\ n "軽度であいまいな冒涜や気分の悪いユーモア。\ n"麻薬やアルコールに関する軽度またはまれな言及。\ n "模擬賭博。\ n"ユーザーが作成したコンテンツ\ n "ソーシャルネットワーキングの統合\ n"、 "ratingDescriptionImageId":478661、 "hasTrial":false、 "releaseVersion": "2.17.2"、 "packageVersion": ""、 "size":9613232} 、 "iconImgUrl": "http://download.appworld.blackberry.com/ClientAPI/image/77644"、 "featuredIconImag "contentResponse":2、 "bbCertified":false、 "contentVisibility": "null"、 "grandParentId":null、 "grandParentName":null、 "contentRatingLevel" 1、 "parentName":null、 "minimumos": "5.0.0"、 "name": "WhatsApp Messenger"、 "id":2360}) ;

2)2番目のJsonレスポンス構造 {"モデル": "9790"、 "createdDate": "2017-07-05"、 "review": "Sin Actualizar anda bien el whatsApp noそれは実際のパラダイムではありませんが、実際のパラダイムはパラレルではありませんが、それはパラレルではありませんが、パラレルではありませんが、パラレルではありません。 "タイトル": "太字6 WhatsApp Activo"、 "ニックネーム": "TheUvaXD"、 "rating":10}、{"model": "Jakarta"、 " 「レビュー」:「Cara video cal」、「title」:「Video cal」、「ニックネーム」:「adeayumfayumi-21650」、「rating」:6}、{「model」:「2017-07-05」、 ":" R144 Classic G†"EU/AP/ME"、 "createdDate": "2017-07-05"、 "review": "Kami berharap bisa dipakai"、 "title": "Tidak bisa digunakan" 「ニックネーム」:「pjlhoki-64268」、「評価」:10}、{ 「モデル」:「ロンドン」、「createdDate」:「2017-07-05」、「レビュー」:「実際の映画はありませんか?」、「タイトル」: "モデル": "ニューポート"、 "createdDate": "2017-07-05"、 "review": "Awesome"、 "title" : "モデル": "ナポリ"、 "createdDate": "2017-07-05"、 "review": "Update": "Yaya"、 "nickname": "xxkrystalpurchon-30824" 、 "タイトル": "D"、 "ニックネーム": "rab1989"、 "格付け":2}、{"モデル": "ナポリ"、 "createdDate": "2017-07-05"、 "review" 「優秀」、「タイトル」、「ワ」、「ニックネーム」:「補足-37543」、「評価」:10}、「モデル」:「ジャカルタ」、「createdDate」:「2017-07-05」、なぜですか? "、"タイトル ":"確認 "、"ニックネーム ":" zamamnguni86-04479 "、"評価 ":2}、{" model ":" Naples "、" createdDate ":" 2017-07-05 "、" review ":"åå¯ä»ç "¨äº†ï¼Œè¯'æ~¯å»¶é•¿å°2017å¹'12æœï¼å"‡å " 「ニックネーム」:「tieniou」、「rating」、「姓」、「姓」、「姓」、「姓」、 :10 "、"モデル ":"ナポリ "、" createdDate ":" 2017-07-05 "、" review ":" Good "、" title ":" Update nya mana? "、" nickname ":" finley "モデル": "ネバダ"、 "作成日": "2017-07-05"、 "レビュー": "私がファッションをしていますか? 。パラグアイ・パラグアイ・ソイ・エル・コル・テンゴ・ブラックベリー」、「タイトル」:「クレオコ」、「ニックネーム」:「racsof77-90591」、「rating」:10}、「モデル」:「9360」、「createdDate」: "タイトル": "いいえpuedoのダウンロードwhatsapp。アルジェリア私のayuda xfa"、 "ニックネーム": " "gabriela-67567"、 "rating":2}]、 "version": "2.17。2" 、 "totalReviews":570054、 "プラットフォーム":NULL});

しかし、上の(KeyError例外このエラーが表示されている "" 説明):Error ScreenShot

私が使用しているコードは:

import scrapy 
import json 
import re 
from blackberry.items import BlackberryItem 
class BlackSpider(scrapy.Spider): 
    name = 'black' 
    start_urls = ['https://appworld.blackberry.com/cas/content/2360/reviews/2.17.2?page=1&pagesize=50000&sortby=newest&callback=_content_2360_reviews_2_17_2&_=1499161778751', 
       'https://appworld.blackberry.com/cas/content/2360?countryid=100&lang=en&callback=_content_2360&_=1499177414482'] 

    def parse(self, response): 
     data = re.findall('(\{.+\})\);', response.body_as_unicode()) 
     a=json.loads(data[0]) 

     #item = BlackberryItem() 
     #for i in range(100): 
      # item["Reviews"] = a["reviews"][i]["review"]   
      # return item 
     yield {"Description":a["description"]} 
     for i in range(50000): 
      yield {"Review":a["reviews"][i]["review"]} 
+0

あなたは完全なエラーをアップロードできますか? – cosinepenguin

+0

@cosinepenguin私はエラースクリーンショットを追加しました – emon

+0

素晴らしい!もう一度実行して 'json.loads()'オブジェクト( 'a')を出力できますか? 'description 'があ​​なたの' a'辞書の中で鍵となったことをチェックしたいかもしれません! – cosinepenguin

答えて

0

あなたがa=json.loads(data[0])でデータを解析するとき、あなたはから参照することができ辞書が、「説明」キーを作成します。あなたのa辞書に「説明」キーの欠如から結果を取得しているエラー辞書構造の「最上位」にない可能性があります。

キーはあなた最初のインデックスがない限り "results"キーアクセスできないよう "Description":a["description"]を実行するときにKeyError例外を返します(この場合)

{ 
    "results" : { 
      "description" : { 
       ... 
      } 
      "reviews" : { 
       ... 
      } 
    } 
} 

たとえば、あなたの構造は、これに似ているかもしれません。

yield {"Description":a["results"]["description"]} 

ご希望の場合は、あなたもあなたの最初の前に

print('description' in a) 

を追加することで、キーの存在をテストすることができます適切"description"にアクセスするには、そのように、"description"キーの前に"results"キーを参照する必要があります実際に動作するかどうかをテストすることができます。 (残りのコードが動作するには、Trueを返す必要があります)。

希望すると助かります!

PS

ここで潜在的に有用なソースです! - json KeyError with json.loads

+0

機能していない、説明は1つのURLのキーです。そして、他のURLレスポンスは、それが重要なのでレビューだけを持っています。リンクを確認してください。 – emon

+0

'a'辞書がどのように見えるか(または元の' data' JSONオブジェクトがどのように見えるか)アップロードするまで、私はあなたをさらに助けることはできません。あなたの 'a'辞書がどのように見えるのかあなたの質問を更新し、何が起こっているのか把握することができます!また、https://jsonformatter.curiousconcept.com/を使用してコードを書式設定し、どこが間違っているかを確認することもできます。私はあなたがそれを理解できることを願っています! – cosinepenguin

+0

2つのURLから辞書構造を追加しました – emon