PythonでのHTMLのrgba透過度の取得の方法を教えていただきたいです。


Pythonでfootball
labというサイトのプレー割合(色の濃さ)を数年分スクレイピングしたいと考えているのですが、どのようにすれば取得できるか教えていただきたいです。

下図の場合、0.60,0.65,0.61,0,78...といった形でデータを取得したいと考えています。

よろしくお願いします。  
[football labの１試合のURL](https://www.football-
lab.jp/y-fm/report/?year=2022&month=02&date=19)

[![football
labのhtml](https://i.stack.imgur.com/DDDoz.png)](https://i.stack.imgur.com/DDDoz.png)




pythonでHTMLソースから`td`タグの`style`属性を取得し、その中の文字列から適当な値を取得したいならば[`BeautifulSoup`](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)で目的を達成できます。

**サンプルコード**

[code]

    import requests
    import re
    from bs4 import BeautifulSoup
    
    pattern = re.compile(r"rgba\((?:\-?\d+,){3}([01]\.\d*)\)")
    res = requests.get("https://www.football-lab.jp/y-fm/report/?year=2022&month=02&date=19")
    
    if res.status_code == 200:
        bs = BeautifulSoup(res.text, 'html.parser')
        tr1 = bs.find_all("table", attrs={"class":"hotzone"})[0] # <table class="hotzone"> に該当するタグの1個目を取得
        for td in tr1.find_all("td"):
            style = td.attrs["style"]
            m = pattern.search(style)
            print(style, "透明度: ", m.group(1))
    
[/code]

**実行結果**

[code]

    background: rgba(255,255,255,0.60); 透明度:  0.60
    background: rgba(219,245,231,0.65); 透明度:  0.65
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(102,212,152,0.81); 透明度:  0.81
    background: rgba(-31,175,62,0.99); 透明度:  0.99
    background: rgba(31,193,104,0.91); 透明度:  0.91
    background: rgba(87,208,141,0.83); 透明度:  0.83
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(194,238,214,0.68); 透明度:  0.68
    background: rgba(112,215,159,0.80); 透明度:  0.80
    background: rgba(5,185,86,0.94); 透明度:  0.94
    background: rgba(102,212,152,0.81); 透明度:  0.81
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(219,245,231,0.65); 透明度:  0.65
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(173,232,200,0.71); 透明度:  0.71
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(194,238,214,0.68); 透明度:  0.68
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(173,232,200,0.71); 透明度:  0.71
    background: rgba(209,242,224,0.66); 透明度:  0.66
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(148,225,183,0.75); 透明度:  0.75
    background: rgba(87,208,141,0.83); 透明度:  0.83
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(194,238,214,0.68); 透明度:  0.68
    background: rgba(219,245,231,0.65); 透明度:  0.65
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(66,202,128,0.86); 透明度:  0.86
    background: rgba(138,222,176,0.76); 透明度:  0.76
    background: rgba(148,225,183,0.75); 透明度:  0.75
    background: rgba(87,208,141,0.83); 透明度:  0.83
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(255,255,255,0.60); 透明度:  0.60
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(77,205,135,0.85); 透明度:  0.85
    background: rgba(77,205,135,0.85); 透明度:  0.85
    background: rgba(112,215,159,0.80); 透明度:  0.80
    background: rgba(5,185,86,0.94); 透明度:  0.94
    background: rgba(148,225,183,0.75); 透明度:  0.75
    background: rgba(255,255,255,0.60); 透明度:  0.60
    
[/code]




pythonでHTMLソースから`td`タグの`style`属性を取得し、その中の文字列から適当な値を取得したいならば[`BeautifulSoup`](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)で目的を達成できます。

**サンプルコード**

[code]

    import requests
    import re
    from bs4 import BeautifulSoup
    
    pattern = re.compile(r"rgba\((?:\-?\d+,){3}([01]\.\d*)\)")
    res = requests.get("https://www.football-lab.jp/y-fm/report/?year=2022&month=02&date=19")
    
    if res.status_code == 200:
        bs = BeautifulSoup(res.text, 'html.parser')
        tr1 = bs.find_all("table", attrs={"class":"hotzone"})[0] # <table class="hotzone"> に該当するタグの1個目を取得
        for td in tr1.find_all("td"):
            style = td.attrs["style"]
            m = pattern.search(style)
            print(style, "透明度: ", m.group(1))
    
[/code]

**実行結果**

[code]

    background: rgba(255,255,255,0.60); 透明度:  0.60
    background: rgba(219,245,231,0.65); 透明度:  0.65
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(102,212,152,0.81); 透明度:  0.81
    background: rgba(-31,175,62,0.99); 透明度:  0.99
    background: rgba(31,193,104,0.91); 透明度:  0.91
    background: rgba(87,208,141,0.83); 透明度:  0.83
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(194,238,214,0.68); 透明度:  0.68
    background: rgba(112,215,159,0.80); 透明度:  0.80
    background: rgba(5,185,86,0.94); 透明度:  0.94
    background: rgba(102,212,152,0.81); 透明度:  0.81
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(219,245,231,0.65); 透明度:  0.65
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(173,232,200,0.71); 透明度:  0.71
    background: rgba(122,218,166,0.78); 透明度:  0.78
    background: rgba(194,238,214,0.68); 透明度:  0.68
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(173,232,200,0.71); 透明度:  0.71
    background: rgba(209,242,224,0.66); 透明度:  0.66
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(148,225,183,0.75); 透明度:  0.75
    background: rgba(87,208,141,0.83); 透明度:  0.83
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(194,238,214,0.68); 透明度:  0.68
    background: rgba(219,245,231,0.65); 透明度:  0.65
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(158,228,190,0.73); 透明度:  0.73
    background: rgba(66,202,128,0.86); 透明度:  0.86
    background: rgba(138,222,176,0.76); 透明度:  0.76
    background: rgba(148,225,183,0.75); 透明度:  0.75
    background: rgba(87,208,141,0.83); 透明度:  0.83
    background: rgba(184,235,207,0.70); 透明度:  0.70
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(255,255,255,0.60); 透明度:  0.60
    background: rgba(245,252,248,0.61); 透明度:  0.61
    background: rgba(230,248,238,0.64); 透明度:  0.64
    background: rgba(77,205,135,0.85); 透明度:  0.85
    background: rgba(77,205,135,0.85); 透明度:  0.85
    background: rgba(112,215,159,0.80); 透明度:  0.80
    background: rgba(5,185,86,0.94); 透明度:  0.94
    background: rgba(148,225,183,0.75); 透明度:  0.75
    background: rgba(255,255,255,0.60); 透明度:  0.60
    
[/code]

