ITの隊長のブログ

ITの隊長のブログです。Pythonを使って仕事しています。最近は機械学習をさわりはじめたお(^ω^ = ^ω^)

Seleniumを使って、dl > dt, ddのフォーマットでddが複数あるときのスクレイピング

スポンサードリンク

こういうやつ

<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とか使えたら。。。って思うけどまぁいいや(多分これで大丈夫なはず)。さっと作ったので多分ボロいはず