2017-11-22 1 views
1

WebページからJSONデータを抽出したいので、私はそれを調べました。私が必要とするデータをフォーマット以下に保存されています。どのように私はそれを変更する必要があり、Python2のscrapyでjsonをWebから読む

import scrapy 
import json 

class OpenriceSpider(scrapy.Spider): 
    name = 'openrice' 
    allowed_domains = ['www.openrice.com'] 

    def start_requests(self): 
     headers = { 
      'accept-encoding': 'gzip, deflate, sdch, br', 
      'accept-language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4', 
      'upgrade-insecure-requests': '1', 
      'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36  (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 
      'accept':  'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
      'cache-control': 'max-age=0', 
     } 
     url = 'https://www.openrice.com/en/hongkong/r-kitchen-one-cafe-sha-tin-western-r483821' 
     yield scrapy.Request(url=url, headers=headers, callback=self.parse) 

    def parse(self, response): # response = request url ? 
     items = [] 
     jsonresponse = json.loads(response) 

しかし、それは動作しません:

<script type="application/ld+json"> 
    { 
    'data I want to extract' 
    } 
    </script> 

私が使用しようとしましたか?

答えて

4

あなたは、HTMLソース内のそのscript要素を探し、それがテキストだ抽出だけにしてjson.loads()でロードする必要があります:私はscriptを見つけるためにそれほど一般的ではないapplication/ld+jsonを使用しています、

script = response.xpath("//script[@type='application/ld+json']/text()").extract_first() 
json_data = json.loads(script) 
print(json_data) 

をここでは、しかし、そこに他にも多くのオプションがありますが、スクリプト自体にあることを知っているテキストを使ってスクリプトを探します:

//script[contains(., 'Restaurant')] 
関連する問題