2017-12-06 7 views
0

私はこのwebsiteのデータを削り取ろうとしています。ページは重いjavascriptを使用し、私はそれからhrefとオッズを得るために苦労しています。href、チーム、賭けサイトからのオッズを削る

私の現在の出力は次のようになります。

私は私の出力はのようになりたいと思っています...(緑): enter image description here

enter image description here

class BlueBet(scrapy.Spider): 
    name = "BlueBet" 
    start_urls = ['https://www.bluebet.com.au/api/sports/SportsMasterCategory?withLevelledMarkets=true&id=100'] 

    custom_settings = { 
     'FEED_FORMAT': 'csv', 
     'FEED_URI': 'odds.csv', 
     'FEED_EXPORT_ENCODING': 'utf-8', 
    } 

    def parse(self, response): 
     data = json.loads(response.body) 

     for master_category in data['MasterCategories']: 
      for category in master_category['Categories']: 
       for event in category['MasterEvents']: 
        item = {} 
        item['Event_name'] = event.get('MasterEventName') 
        item['Outcomes'] = {} 
        try: 
         for market in event['Markets']: 
          item['Outcomes'][market.get('OutcomeName')] = market.get('Price') 
        except TypeError: 
         continue 
        yield item 
+1

サイトがJavascriptを使用して値を入力している場合は、Seleniumを使用することをおすすめします。 –

+0

@HavanAgrawal実際には大丈夫かと思われます。 view-source:https://www.bluebet.com.au/sports/Soccer/100。私はちょうど良い要素を得るために苦労しています –

+1

あなたがこの呼び出しに気付くかもしれないページのデータをレンダリングするためにウェブサイトを作るコールを追跡するなら:https://www.bluebet.com.au/api/sports/SportsMasterCategory? withLevelledMarkets = true&id = 100です。あなたがする必要があるのは、返されたjsonを解析することだけです。 – BoboDarph

答えて

0

あなたのようなデータを取得しますこの

{ 
    'Event_name': 'Melbourne Victory v Adelaide United', 
    'Outcomes': { 
     'Melbourne Victory': 2.05, 
     'Draw': 3.5, 
     'Adelaide United': 3.4 
    } 
} 

およびOutcomesを分割した列に分割したいとします。

ただし、列には治療の名前が必要ですItem
私は名前key1val1key2val2key3val3

data = {'Event_name': 'Melbourne Victory v Adelaide United', 
    'Outcomes': {'Melbourne Victory': 2.05, 'Draw': 3.5, 'Adelaide United': 3.4}} 

# --- 

item = {'Event_name': data['Event_name']} 

for number, (key, val) in enumerate(data['Outcomes'].items(), 1): 
    number = str(number) 
    print(number, key, val) 
    item["key"+number] = key 
    item["val"+number] = val 

print(item) 

を使用し、これはアイテム

{ 
    'Event_name': 'Melbourne Victory v Adelaide United', 
    'key1': 'Melbourne Victory', 
    'val1': 2.05, 
    'key2': 'Draw', 
    'val2': 3.5, 
    'key3': 'Adelaide United', 
    'val3': 3.4 
} 

を与え、これはあなたにExcelで分離された列のデータを与える必要があります。

関連する問題