動的なページをrequests
を使った静的なアプローチでパースするのは「基本的には」難しいと思います。(できなくはないですがサイトのロジックを追っかけなければならないので骨が折れます。)
ので、selenium
を使用するアプローチに切り替えてはいかがでしょうか。
http://selenium-python.readthedocs.io
追記(スクレイピングはほどほどに)
python
1from contextlib import closing
2from operator import attrgetter
3from pprint import pprint
4from subprocess import DEVNULL
5from subprocess import Popen
6import time
7
8from selenium import webdriver
9from selenium.webdriver.common.keys import Keys
10
11
12data = {}
13
14try:
15 server = Popen("chromedriver.exe", stdout=DEVNULL)
16 with closing(webdriver.Chrome()) as driver:
17 driver.implicitly_wait(10)
18 driver.get("https://data.j-league.or.jp/SFIX02/")
19 lbox = driver.find_element_by_id("pullDown")
20 rbox = driver.find_element_by_id("teams")
21
22 def iter_opt_texts(box, start=0):
23 yield from map(
24 attrgetter("text"),
25 box.find_elements_by_tag_name("option")[start:],
26 )
27
28 for ltext in iter_opt_texts(lbox, 1):
29 lbox.send_keys(Keys.ARROW_DOWN)
30 time.sleep(1)
31 data[ltext] = list(iter_opt_texts(rbox, 1))
32finally:
33 server.terminate()
34
35pprint(data)
実行結果
{'J1リーグ': ['北海道コンサドーレ札幌',
'ベガルタ仙台',
'鹿島アントラーズ',
'浦和レッズ',
'大宮アルディージャ',
'柏レイソル',
'FC東京',
'川崎フロンターレ',
'横浜F・マリノス',
'ヴァンフォーレ甲府',
'アルビレックス新潟',
'清水エスパルス',
'ジュビロ磐田',
'ガンバ大阪',
'セレッソ大阪',
'ヴィッセル神戸',
'サンフレッチェ広島',
'サガン鳥栖'],
'J2リーグ': ['モンテディオ山形',
'水戸ホーリーホック',
'ザスパクサツ群馬',
'ジェフユナイテッド千葉',
'東京ヴェルディ',
'FC町田ゼルビア',
'横浜FC',
'湘南ベルマーレ',
'松本山雅FC',
'ツエーゲン金沢',
'名古屋グランパス',
'FC岐阜',
'京都サンガF.C.',
'ファジアーノ岡山',
'レノファ山口FC',
'カマタマーレ讃岐',
'徳島ヴォルティス',
'愛媛FC',
'アビスパ福岡',
'V・ファーレン長崎',
'ロアッソ熊本',
'大分トリニータ'],
'J3リーグ': ['グルージャ盛岡',
'ブラウブリッツ秋田',
'福島ユナイテッドFC',
'栃木SC',
'Y.S.C.C.横浜',
'SC相模原',
'AC長野パルセイロ',
'カターレ富山',
'藤枝MYFC',
'アスルクラロ沼津',
'ガイナーレ鳥取',
'ギラヴァンツ北九州',
'鹿児島ユナイテッドFC',
'FC琉球',
'FC東京U-23',
'ガンバ大阪U-23',
'セレッソ大阪U-23']}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/23 07:07
2017/05/23 23:54