まずここを参考
WOEID
なるものがよくわからず、ぐぐるのに苦労したけどこのQiitaの記事に助けられた。
また、取得できる値で tweet_volume
がnullなケースが多い。なんでだろうと思い、ブラウザで確認できるトレンド情報と比較してみると、どうやら1万件未満のトレンドは0に丸められるっぽい。なんだと・・・
よくみるフォーマットですね。コマンドで実行するとどの単語のまとまり(chunk)に係っているか確認できます。
で、こいつをPythonから使ってみるといまいちクラスのインターフェースがよくわからず四苦八苦していましたが、先に組んでくれた人のコードをみたらだいたい理解できた。
簡略版でこんな感じ。
import CaboCha from collections import defaultdict option = '-d /usr/lib/mecab/dic/mecab-ipadic-neologd' parser = CaboCha.Parser(option) tree = cabocha.parse('昔、わたしが飼っていた猫は、とても美味しそうな缶詰を食べていた。') prev_links_dic = defaultdict(list) for chunk_id in range(tree.chunk_size()): chunk = tree.chunk(chunk_id) print('chunk_id:', chunk_id, ', chunk_link:', chunk.link) for j in range(chunk.token_size): token_id = chunk.token_pos + j token = tree.token(token_id) print(token.surface, '\t', token.feature) if chunk.link >= 0: prev_links_dic[chunk.link].append(chunk_id) # chunk_id: 0 , chunk_link: 2 # 昔 名詞,副詞可能,*,*,*,*,昔,ムカシ,ムカシ # 、 記号,読点,*,*,*,*,、,、,、 # chunk_id: 1 , chunk_link: 2 # わたし 名詞,代名詞,一般,*,*,*,わたし,ワタシ,ワタシ # が 助詞,格助詞,一般,*,*,*,が,ガ,ガ # chunk_id: 2 , chunk_link: 3 # 飼っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,飼う,カッ,カッ # て 助詞,接続助詞,*,*,*,*,て,テ,テ # い 動詞,非自立,*,*,一段,連用形,いる,イ,イ # た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ # chunk_id: 3 , chunk_link: 7 # 猫 名詞,一般,*,*,*,*,猫,ネコ,ネコ # は 助詞,係助詞,*,*,*,*,は,ハ,ワ # 、 記号,読点,*,*,*,*,、,、,、 # chunk_id: 4 , chunk_link: 5 # とても 副詞,助詞類接続,*,*,*,*,とても,トテモ,トテモ # chunk_id: 5 , chunk_link: 6 # 美味し 形容詞,自立,*,*,形容詞・イ段,ガル接続,美味しい,オイシ,オイシ # そう 名詞,接尾,助動詞語幹,*,*,*,そう,ソウ,ソー # な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ # chunk_id: 6 , chunk_link: 7 # 缶詰 名詞,一般,*,*,*,*,缶詰,カンヅメ,カンズメ # を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ # chunk_id: 7 , chunk_link: -1 # 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ # て 助詞,接続助詞,*,*,*,*,て,テ,テ # い 動詞,非自立,*,*,一段,連用形,いる,イ,イ # た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ # 。 記号,句点,*,*,*,*,。,。,。 for chunk_id in prev_links_dic.keys(): print(chunk_id, prev_links_dic[chunk_id]) # 2 [0, 1] # 3 [2] # 7 [3, 6] # 5 [4] # 6 [5]
こういうやつ
<dl> <dt></dt> <dd></dd> <dd></dd> <dt></dt> <dd></dd> </dl>
dtとddで1対1かしらとか思ってたけど、そうじゃなかったねめんどくさい。
というわけでゴリ押してみた
def add_values(values, _values): if len(_values) > 0: values.append(_values) def get_data(driver): ds = driver.find_elements_by_css_selector('dl > *') keys = [] values = [] _values = [] n = len(ds) i = 0 while n > i: d = ds[i] if d.tag_name == 'dt': keys.append(d.text) add_values(values, _values) _values = [] i += 1 continue if d.tag_name == 'dd': _values.append(d.text) i += 1 continue add_values(values, _values) return dict(zip(keys, values))
途中でddがきたら、dtが来るまでため続けて、dtがきたらddをvaluesのlistに追加してクリアするを繰り返す。
jqueryみたいにnextとか使えたら。。。って思うけどまぁいいや(多分これで大丈夫なはず)。さっと作ったので多分ボロいはず