【python】スクレイピング後に数値のみを抽出したい。

スクレイピングしたデータを解析したいとき、数値のみを抽出したいことがよくあります。

例えば以下のサイトでFG(フィールドゴール)の確率を取り出したいと思います。

シュートの「確率」を知っておけばNBAが200倍よく解る

import timefrom bs4 import BeautifulSoupimport requestsheaders = {"任意の値"}url = "https://jasonkido.hatenablog.com/entry/2020/01/25/204831"res = requests.get(url,headers=headers,timeout=3)time.sleep(1)if res.status_code != 200 : pass time.sleep(2)soup = BeautifulSoup(res.text,"html.parser")time.sleep(2)fg = soup.select("#entry-26006613499890629 > div > div > div.box27 > ul > li:nth-child(1) > strong")print(fg)

すると以下のように抽出することができます。

これではまだタグが付いているので、「print(fg[0].string)」と記述して、FGのパーセンテージのみを取りだすことができました。

しかし、これではまだ、数値のみを抽出させることができていません。

数値のみを取り出すのはどのような方法があるのでしょうか。

調べた結果、「正規表現」や「split()」によって取り出すことができます。

split() による分割

f = fg[0].stringprint(f)print(type(f))aaa = str(f)print(type(aaa))aaa.split("%")bbb = aaa.split("%")print(bbb)type(bbb)bbb[0] 

「split()」は文字列専用の関数になるので、4行目で変数のstr型に変更しています。 「split()」 で分割した文字列はリスト型になるので、リスト番号を指定して、分割したものを抽出します。

正規表現

図解!Python 正規表現の徹底解説!(文字列の抽出と置換など)

sub関数を使用する。

re.sub(正規表現のパターン, 置換後の文字列, 検索対象の文字列)ですので、置換後の文字列を空白にしておけば、patternで見つけ出した文字列を消去することが可能です。

search関数を使用する。

先頭に限らずパターンに一致するものがあるかを抽出する。

import ref = str(fg[0].string)print(f)pattern = "[0-9]{2}.[0-9]"r = re.search(pattern,f)print(r.group())


【python】数値のみを抽出したい。
ツイートもチェックしよう!