LoginSignup
28
45

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-03-22

Web Scraping (スクレイピング)とは

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

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

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

こんなかんじのファイルができてるかと思います

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

この日経株価サイト
日時,日経平均株価,ダウ平均,為替ドル
といった情報を抽出・print・保存しました

スクリーンショット 2019-03-23 2.37.50.png
引用:https://nikkei225jp.com/chart/

このページの
スクリーンショット 2019-03-23 2.38.10.png
ここの部分の情報を抽出してます

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

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

流れとしては

r = requests.get('スクレイピングしたいページのURL')

で返されたたレスポンス(ページ情報)が変数rに格納されて

text = r.text

で返ってきたレスポンスrのボディ(HTML本体)をtextとしてテキスト形式で取得してます

スクリーンショット 2019-03-23 3.26.59.png

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

を抽出したければ

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

<div class="if_cur">21,627.34</div>

このようにif_curというクラスでサンドイッチ状態なので

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タグ取得コードを追加しただけです

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

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/

ページ内のリンクとってこれてるのがわかると思う

#print(a.text) # 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.の他のメソッドはこちらを参考に!

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

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

Github

28
45
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
45