- 作者: 清水理史,できるシリーズ編集部
- 出版社/メーカー: インプレス
- 発売日: 2019/02/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
i.river.go.jpからダムの貯水率を取得する
import re import requests from bs4 import BeautifulSoup dam_name = '早明浦ダム' url = 'http://i.river.go.jp/_-p01-_/p/ktm1801070/?mtm=10&swd=&prf=3601&twn=3601208&rvr=&den=2255200700004' # dam_name = '玉川ダム' # url = 'http://i.river.go.jp/_-p01-_/p/ktm1801070/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900700006' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko' } r = requests.get(url, headers=headers) if r.status_code == 200: soup = BeautifulSoup(r.content, 'html5lib') contents = soup.find('a', {'name': 'contents'}).get_text('\n', strip=True) # print(contents) # サブタイトル・単位を除去 temp = re.sub(r'■\d{1,2}時間履歴\n単位:%\n', '', contents) datas = [i.split() for i in temp.splitlines()] for data in datas: try: float(data[1]) except: continue else: print('ただいまの{0}の貯水率は{1[1]}%です({1[0]})'.format(dam_name, data)) break else: print('取得できませんでした')
ひとりslack
slackに移行
Pythonを使ってWebページから情報を取得する
Pythonで作ってみた
import requests from bs4 import BeautifulSoup url = 'http://www.nogizaka46.com/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko' } media = {'tv': 'テレビ', 'radio': 'ラジオ', 'web': 'ウェブ'} r = requests.get(url, headers=headers) soup = BeautifulSoup(r.content, 'html.parser') for key in media.keys(): print(f'[{media[key]}]') lis = [ i.get_text(strip=True) for i in soup.select(f'div.today > ul > li > a.{key}') ] if len(lis) > 0: for li in lis: print(f'- {li}') else: print('') else: print(' 出演はありません')
スクレイピングのおけるCSSセレクタ基本
サンプル
<div class="class" id="id"> <h1>タイトル</h1> <h2>サブタイトル</h2> <p value="abc">テスト</p> <p value="abc def">テスト</p> <p value="abc-def">テスト</p> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> </div>
基本
書式 | 説明 | サンプル |
---|---|---|
* | すべての要素 | * |
要素名 | 要素名の要素 | div |
.クラス名 | id属性をつけた要素 | div.class |
#id名 | id属性をつけた要素 | div#id |
セレクタ同士の関係
書式 | 説明 | サンプル |
---|---|---|
セレクタ1,セレクタ2 | 複数のセレクタ | h1,h2 |
セレクタ1 セレクタ2 | セレクタ1の下の階層の子孫要素セレクタ2 | div li |
セレクタ1 > セレクタ2 | セレクタ1の直下の階層の子要素セレクタ2 | div > h1 |
セレクタ1 + セレクタ2 | セレクタ1に隣接している要素セレクタ2※同じ階層 | h1 + h2 |
セレクタ1 ~ セレクタ2 | セレクタ1のあとにある要素セレクタ2※同じ階層 | p ~ ul |
セレクタの属性
書式 | 説明 | サンプル |
---|---|---|
要素[value] | 特定の属性を持つ要素 | p[value] |
要素[value="abc"] | value属性にabcという値を持つ要素 | p[value="abc"] |
要素[value~="abc"] | value属性にabcという単語が含まれる要素(スペース区切り) | p[value~="abc"] |
要素[value|="abc"] | value属性にabcという単語が含まれる要素(ハイフン区切り) | p[value|="abc"] |
要素[value^="abc"] | value属性にabcで始まる要素 | p[value^="abc"] |
要素[value$="abc"] | value属性にdefで終わる要素 | p[value$="def"] |
要素[value*="e"] | value属性にeという文字を含む要素 | p[value*="e"] |