【Python】初心者必見！Web Scraping 超入門

#Web Scraping （スクレイピング）とは

**Web上から欲しい情報のみを抽出・処理**する技術のこと

まあ，とりあえずこれを実行してみてください

```python:Python3
import requests
import json

r = requests.get('https://nikkei225jp.com/chart/')
text = r.text
date    = text.split('<div class=wtimeT>')[1].split('</div>')[0]
nikkei   = text.split('<div class=if_cur>')[1].split('</div>')[0].replace(',','')
dau       = text.split('<div class=if_cur>')[2].split('</div>')[0].replace(',','')
kawase = text.split('<div class=if_cur>')[3].split('</div>')[0].replace(',','')

print('今日は',date,'です')
print ('日経株価は ',nikkei, '円です')
print ('ダウ平均株価は', dau, '円です')
print ('為替ドルは', kawase,'円です')

a=open('shares.csv','w')
a.write('日時,日経平均株価,ダウ平均株価,為替ドル\n')
a.write(date+','+nikkei+','+dau+','+kawase+'\n')
a.close()
```

```:結果（コマンドライン）
今日は 2019/03/23 です
日経株価は  21627.34 円です
ダウ平均株価は 25502.32 円です
為替ドルは 109.93 円です
```
こんなかんじにprintされると思います

```:結果（shares.csv）
日時,日経平均株価,ダウ平均株価,為替ドル
2019/03/23,21627.34,25502.32,109.93
```
こんなかんじのファイルができてるかと思います

プログラムが何をやったのかというと

この[日経株価サイト](https://nikkei225jp.com/chart/)の
***日時，日経平均株価，ダウ平均，為替ドル***
といった情報を抽出・print・保存しました

<img width="1051" alt="スクリーンショット 2019-03-23 2.37.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/377231/5ae44ef8-3f3e-fbda-32e5-ed2251c17241.png">
引用：https://nikkei225jp.com/chart/

このページの
<img width="318" alt="スクリーンショット 2019-03-23 2.38.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/377231/ae2dc481-901a-4489-be15-9587edebeda1.png">
ここの部分の情報を抽出してます

Web Scrapingにも ***Beautiful Soup*** だったり ***Selenium*** 使った便利なやり方がありますが

今回は ***requests*** のみの原始的なやり方を採用しました

流れとしては

```python
r = requests.get('スクレイピングしたいページのURL')
```
で返されたたレスポンス（ページ情報）が変数***r***に格納されて

```python
text = r.text
```
で返ってきたレスポンス***r***のボディ（HTML本体）を***text***としてテキスト形式で取得してます

<img width="690" alt="スクリーンショット 2019-03-23 3.26.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/377231/3a9991ea-e5a4-e14a-2042-ac1fd16d1fad.png">

例えば***日経平均株価***である***21,627.34***

を抽出したければ

上図のように抽出したい情報を選択して
「**検証**」または「**ページのソースを表示**」で検索にかけると

```html
<div class="if_cur">21,627.34</div>
```
このように***if_cur***というクラスでサンドイッチ状態なので

```python
nikkei   = text.split('<div class=if_cur>')[1].split('</div>')[0].replace(',','')
```
この一行で***nikkei***として中身を抽出してるかんじです

.replace(',','')はカンマ（,）を取り除いてるだけです


***ダウ平均***, ***為替ドル***, ***時刻*** も同じやり方です

一番原始的だけどわりといろんなパターンに対応できるやり方です

#Beautiful Soup で指定タグ全部持ってこよう！
今度はさっきの日経平均株価ページ内に存在するリンク（URL)を**全部抽出**します

今回はさっきのように一個ずつ抽出するコード描いてたらキリがないので

とりあえず***a***タグ（URLのあるタグ）を全部抽出して配列に格納してくパターンです

***Beautiful Soup***はこれで入れてください

```
$ pip install beautifulsoup4
```
先ほどのプログラムに***a***タグ取得コードを追加しただけです

とりあえず実行してみてください

```python
import requests
import json
from bs4 import BeautifulSoup

r = requests.get('https://nikkei225jp.com/chart/')
text = r.text
date    = text.split('<div class=wtimeT>')[1].split('</div>')[0]
nikkei   = text.split('<div class=if_cur>')[1].split('</div>')[0].replace(',','')
dau       = text.split('<div class=if_cur>')[2].split('</div>')[0].replace(',','')
kawase = text.split('<div class=if_cur>')[3].split('</div>')[0].replace(',','')

print('今日は',date,'です')
print ('日経株価は ',nikkei, '円です')
print ('ダウ平均株価は', dau, '円です')
print ('為替ドルは', kawase,'円です')

a=open('shares.csv','w')
a.write('日時,日経平均株価,ダウ平均株価,為替ドル\n')
a.write(date+','+nikkei+','+dau+','+kawase+'\n')
a.close()


#ここから下が追加分
soup = BeautifulSoup(r.text , "html.parser") 

for a in soup.find_all('a'):
    if 'http' in str(a): #今回は http ついてる aタグのみに限定
        #print(a.text) # aタグの中身（タイトル）
        print(a.attrs['href']) #URL
```

```:結果（コマンドライン）
今日は 2019/03/23 です
日経株価は  21627.34 円です
ダウ平均株価は 25502.32 円です
為替ドルは 109.93 円です
http://xn--u9jt60g57a227ciso.com/
http://quote.jpx.co.jp/jpx/template/quote.cgi?F=tmp/real_index&QCODE=155
http://klug-fx.jp/holiday/
https://jp.investing.com/holiday-calendar/
https://db.225225.jp/
https://nikkei225jp.com/chart/
https://nikkei225jp.com/nasdaq/
https://nikkei225jp.com/fx/
https://ch225.com/
https://225225.jp/
https://nikkei225jp.com/cme/
https://adr-stock.com/
http://fx.minkabu.jp/indicators/calendar
http://jp.reuters.com/investing/news/economic
http://www3.nhk.or.jp/news/html/20190323/k10011858101000.html
http://moneyzine.jp/article/detail/215915
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/19cDqM88PGE/graphics-frb-idJPKCN1R30VK
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/wqkbZgbeMMA/asia-companies-outlook-analysis-idJPKCN1R30Y2
http://www.asahi.com/articles/ASM3D3S9TM3DULFA00N.html?ref=rss
http://diamond.jp/articles/-/197806
http://www.asahi.com/articles/ASM3R1SPZM3RUHBI003.html?ref=rss
https://zai.diamond.jp/list/fxnews/detail?id=312805&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
https://zai.diamond.jp/list/fxnews/detail?id=312804&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
https://zai.diamond.jp/list/fxnews/detail?id=312803&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
https://zai.diamond.jp/list/fxnews/detail?id=312802&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
https://zai.diamond.jp/list/fxnews/detail?id=312801&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
http://www3.nhk.or.jp/news/html/20190322/k10011857501000.html
http://diamond.jp/articles/-/197800
http://feeds.reuters.com/~r/reuters/JPMarketNews/~3/k7hVYUD0Rlw/usa-trump-russia-idJPL3N21949Q
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/7SX2E12xQqA/ny-market-summary-0322-idJPKCN1R32TP
https://www.nikkei.com/article/DGXLASM7IAA05_T20C19A3000000/
http://feeds.reuters.com/~r/reuters/JPCompanyNews/~3/vP8IyPxDb_w/EU-HUAWEI-TECH--idJPL3N21946T
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/dhPXy0bfxg8/ny-stx-us-idJPKCN1R32SJ
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/f5sMkCorXO8/ny-forex-idJPKCN1R32SB
http://feeds.reuters.com/~r/reuters/JPMarketNews/~3/fYZ-Sat0U3Y/ny-markets-summary-idJPL3N2194BF
http://feeds.reuters.com/~r/reuters/JPCompanyNews/~3/unMMYgBSv38/ny-stx-us-idJPL3N21946R
http://feeds.reuters.com/~r/reuters/JPCompanyNews/~3/FIxyRRMByHY/pinterest-ipo-idJPL3N21949V
https://zai.diamond.jp/list/fxnews/detail?id=312800&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
https://www.nikkei.com/article/DGXLASH2ICE01_T20C19A3000000/
http://www.traders.co.jp/foreign_stocks/market_s.asp#today
http://www.gaitame.com/market/yosoku.html
http://market.fisco.co.jp/update/index.jsp
http://www.traderswebfx.jp/news/default.aspx?ID=7#newslist
http://kabuyoho.ifis.co.jp/
http://www.tokyoipo.com/top/iposche/index.php?j_e=J
http://klug-fx.jp/holiday/
https://jp.investing.com/holiday-calendar/
http://world.honda.com/worldclock/
https://news.yahoo.co.jp/search?p=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&ei=utf-8&fr=news_sw
https://www.google.co.jp/search?hl=ja&gl=jp&tbm=nws&authuser=0&q=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&oq=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&gs_l=news-cc.1.0.43j43i53.2284.2284.0.5545.1.1.0.0.0.0.56.56.1.1.0...0.0...1ac.1.oMorwBF68ss#q=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&hl=ja&gl=jp&authuser=0&tbm=nws&tbs=sbd:1
http://chart.fisco.co.jp/fisco/cgi-bin/index.cgi
http://chart.fisco.co.jp/fisco/cgi-bin/index.cgi
https://www.dukascopy.jp/
```
ページ内のリンクとってこれてるのがわかると思う

```python
#print(a.text) # aタグの中身（タイトル）
```
部分のコメントアウトとれば***a***タグのタイトルもとってこれる

```aタグタイトル追加（コマンドライン）
今日は 2019/03/23 です
日経株価は  21627.34 円です
ダウ平均株価は 25502.32 円です
為替ドルは 109.93 円です
世界の株価.com
http://xn--u9jt60g57a227ciso.com/
東
http://quote.jpx.co.jp/jpx/template/quote.cgi?F=tmp/real_index&QCODE=155
[Klug]
http://klug-fx.jp/holiday/
[Investing]
https://jp.investing.com/holiday-calendar/
リアルタイム市況 Parts
https://db.225225.jp/
日経平均株価
https://nikkei225jp.com/chart/
ダウ平均株価
https://nikkei225jp.com/nasdaq/
為替 ドル円
https://nikkei225jp.com/fx/
世界株価
https://ch225.com/
携帯
https://225225.jp/
CME
https://nikkei225jp.com/cme/
ADR
https://adr-stock.com/
みんなの為替
http://fx.minkabu.jp/indicators/calendar
ロイター
http://jp.reuters.com/investing/news/economic
外国人材受け入れ拡大で生活支援ｻｰﾋﾞｽ強化の動き
http://www3.nhk.or.jp/news/html/20190323/k10011858101000.html
銀行の預金､149か月連続で前年同月上回る ﾏｲﾅｽ金利導入後､銀行の収益環 …
http://moneyzine.jp/article/detail/215915
ｱﾝｸﾞﾙ:FRBのﾊﾄ派転換､米家計にもたらす好影響
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/19cDqM88PGE/graphics-frb-idJPKCN1R30VK
焦点:ｱｼﾞｱ企業の設備投資､中国減速で3年ぶりに減少へ
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/wqkbZgbeMMA/asia-companies-outlook-analysis-idJPKCN1R30Y2
原発支援へ補助制度案 経産省､2020年度創設めざす
http://www.asahi.com/articles/ASM3D3S9TM3DULFA00N.html?ref=rss
22日のNY市場は大幅下落 - 最新株式ﾆｭｰｽ
http://diamond.jp/articles/-/197806
NYﾀﾞｳ大幅反落､460ﾄﾞﾙ安 世界経済の減速懸念
http://www.asahi.com/articles/ASM3R1SPZM3RUHBI003.html?ref=rss
続伸､株安や債券高からﾘｽｸ回避的な資金が流入
https://zai.diamond.jp/list/fxnews/detail?id=312805&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
NY金先物は続伸､株安や債券高からﾘｽｸ回避的な資金が流入
https://zai.diamond.jp/list/fxnews/detail?id=312804&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
NY原油先物は続落､世界経済の悪化が深刻化するとの懸念
https://zai.diamond.jp/list/fxnews/detail?id=312803&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
NY市場動向(取引終了):ﾀﾞｳ460.19ﾄﾞﾙ安(速報)､原油先物0.94ﾄﾞﾙ安
https://zai.diamond.jp/list/fxnews/detail?id=312802&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
世界各国通貨に対する円:対ﾄﾞﾙ0.81%高､対ﾕｰﾛ1.43%高
https://zai.diamond.jp/list/fxnews/detail?id=312801&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
外国人材 新在留資格取得へﾃｷｽﾄ作成 外食企業の業界団体
http://www3.nhk.or.jp/news/html/20190322/k10011857501000.html
 ECBはﾃﾞｼﾞﾀﾙ通貨発行の意思なし=ﾒﾙｼｭ理事【ﾌｨｽｺ･ﾋﾞｯﾄｺｲﾝﾆｭ …
http://diamond.jp/articles/-/197800
UPDATE 1-米特別検察官､ﾛｼｱ疑惑の捜査報告書提出 これ以上の起訴提言せず
http://feeds.reuters.com/~r/reuters/JPMarketNews/~3/k7hVYUD0Rlw/usa-trump-russia-idJPL3N21949Q
NY市場ｻﾏﾘｰ(22日)
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/7SX2E12xQqA/ny-market-summary-0322-idJPKCN1R32TP
NY円､反発 1ﾄﾞﾙ=109円90銭?110円00銭で終了､一時1ｶ月ぶり円高
https://www.nikkei.com/article/DGXLASM7IAA05_T20C19A3000000/
再送-EXCLUSIVE-欧州委､5Gからﾌｧｰｳｪｲ排除せず ﾃﾞｰﾀ共有提言へ=関 …
http://feeds.reuters.com/~r/reuters/JPCompanyNews/~3/vP8IyPxDb_w/EU-HUAWEI-TECH--idJPL3N21946T
米国株式市場が急反落､世界景気低迷不安強まる
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/dhPXy0bfxg8/ny-stx-us-idJPKCN1R32SJ
ﾄﾞﾙが対円で下落､米長短金利逆転で景気懸念高まる=NY市場
http://feeds.reuters.com/~r/reuters/JPBusinessNews/~3/f5sMkCorXO8/ny-forex-idJPKCN1R32SB
NY市場ｻﾏﾘｰ(22日)
http://feeds.reuters.com/~r/reuters/JPMarketNews/~3/fYZ-Sat0U3Y/ny-markets-summary-idJPL3N2194BF
米国株式市場=急反落､世界景気低迷不安強まる
http://feeds.reuters.com/~r/reuters/JPCompanyNews/~3/unMMYgBSv38/ny-stx-us-idJPL3N21946R
UPDATE 1-米画像共有ﾋﾟﾝﾀﾚｽﾄがIPO申請､1億ﾄﾞﾙ規模か
http://feeds.reuters.com/~r/reuters/JPCompanyNews/~3/FIxyRRMByHY/pinterest-ipo-idJPL3N21949V
NYﾏｰｹｯﾄﾀﾞｲｼﾞｪｽﾄ･22日 株大幅安･ﾕｰﾛ安･ﾘﾗ急落
https://zai.diamond.jp/list/fxnews/detail?id=312800&utm_source=zaifxrss&utm_medium=rss&utm_term=zaifxnews&utm_campaign=zaifxrss
ｼｶｺﾞ日本株先物概況･22日
https://www.nikkei.com/article/DGXLASH2ICE01_T20C19A3000000/
スケジュール
http://www.traders.co.jp/foreign_stocks/market_s.asp#today
経済指標予定
http://www.gaitame.com/market/yosoku.html
強弱材料・留意事項
http://market.fisco.co.jp/update/index.jsp
要人発言
http://www.traderswebfx.jp/news/default.aspx?ID=7#newslist
決算スケジュール
http://kabuyoho.ifis.co.jp/
IPOスケジュール
http://www.tokyoipo.com/top/iposche/index.php?j_e=J
市場休日
http://klug-fx.jp/holiday/
市場休日
https://jp.investing.com/holiday-calendar/
世界時計
http://world.honda.com/worldclock/
Yahoo!News「日経平均」
https://news.yahoo.co.jp/search?p=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&ei=utf-8&fr=news_sw
Google News「日経平均」
https://www.google.co.jp/search?hl=ja&gl=jp&tbm=nws&authuser=0&q=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&oq=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&gs_l=news-cc.1.0.43j43i53.2284.2284.0.5545.1.1.0.0.0.0.56.56.1.1.0...0.0...1ac.1.oMorwBF68ss#q=%E6%97%A5%E7%B5%8C%E5%B9%B3%E5%9D%87&hl=ja&gl=jp&authuser=0&tbm=nws&tbs=sbd:1
FISCO
http://chart.fisco.co.jp/fisco/cgi-bin/index.cgi

http://chart.fisco.co.jp/fisco/cgi-bin/index.cgi

https://www.dukascopy.jp/
```
こんなかんじでURLとタイトル部分もとってこれます

中には***http***のリンク部分はあるけどリンクタイトルがないなんて場合もある


***B.S.***ほんと便利ですよね

***B.S.***の他のメソッドは[こちらを参考に!](https://maku77.github.io/python/parse-html-by-beautiful-soup.html)

***selenium***使ったWeb Scrapingも別に紹介している（する予定）なので

よければそっちもどうぞϵ( 'Θ' )϶

#Github
https://github.com/shutokawabata0723/scraping_for_biginner