helium

WEBスクレイピングを行うモジュール。

WEBスクレイピングモジュールにはseleniumがあるが、それをWrapperにして簡単なコードで使えるようにしたのがheliumということである。

heliumドキュメント

インストール

py -m pip install helium

インポート

from helium import *

Firefoxのバックグラウンドでの実行

driver = start_firefox(‘https://palmtrotter.kudos.jp/’, headerless=True)
  • “headerless=True”を指定すると、FirefoxがBackgroundで実行されて画面が開かないようになる。

クリック

click(‘ログイン’)    # 画面上のリンク名をクリックする。
press(ENTER)    # ENTERをクリックする。
  • ページを移動するには、クリックするボタンの名前をclick関数に指定すればよい。
  • ENTERキーは”press(ENTER)”を実行する。

ログイン情報の入力

write(‘member’, into=’ユーザー名またはメールアドレス’)
  • ログイン情報を入力するには、ページソースの入力フィールドのLabelの内容を入れてwriteする。(ブラウザーのフィールドに表示されている名前)

要素の抽出

joukyou = find_all(S('ul > li'))
  • “ul”の中にある”li”だけを抽出する。HTMLタグが使える。
  • HTMLタグのネストを”>”でつないでいけば、特定のエレメントだけを抽出することができる。
    • “find_all(S…)”はリストを生成し、リストの各要素のデータタイプはhelium特有の”helium.S”である。

抽出した要素のリスト化

items = [item.web_element.text for item in lists]
  • listsから順番にitemを選択して、Seleniumの関数でテキストだけを抽出してリスト化する。

round()

標準ライブラリー

round(number, ndigits=None)

四捨五入ではなく、偶数への丸めを行う。

round(float_data, number_of_decimal_place)
  • 2番めの引数を省略した場合は、int型の整数を返す。
  • 2番めの引数を指定すると、float型を返す。
  • マイナスの値は-1は10の位、-2は100の位に丸めたfloat型を返す。(int型にはならない。)
  • 1番目の引数がint型の場合は、マイナスの引数の場合は丸め、プラスの引数の場合はそのままの値を返す。(int型のまま)
  • 正確に十進浮動小数点の数を扱う場合は、標準ライブラリーのdecimalモジュールを使用する。

collections.deque

deque型のデータを扱うことができる。dequeは、”double-ended queue”の略語で「デック」と呼ぶ。

Deque はどちらの側からも 効率よくappend と pop が可能であるが、両端以外の要素へのアクセスが遅いというデメリットもある。

リストでも同様の操作ができるが、固定長のデータを高速に操作することに特化しており、内部のデータ表現形式のサイズと位置を両方変えるようなpop(0) やinsert(0,v) などの操作ではメモリ移動のために効率が悪い。

標準ライブラリー

コンテナデータ型

インポート

from collections import deque

dequeの生成

input_deque = deque(file1.readlines())

pop

リストのpop()と異なり、引数に位置を指定することはできない。

pop()

末尾(右側)から1つ要素を削除して、その値を返す。

input_line = input_deque.pop() 

popleft()

先頭(左側)から1つ要素を削除して、その値を返す。

input_line = input_deque.popleft() 

sorted()

組み込み関数でSortを行う。

Pyton HOW TOs

Sorting HOW TO

サンプルコード

members_sorted = sorted(members)

以下の例では辞書型のデータをSortする時に、Lambda式で要素の値をKeyとして渡すみたいである。(詳細不明)

members_sorted = sorted(members.items(), key=lambda x:x[1])