python3 スクレイピング練習(超初級)

※プログラムのコメントアウトがタグに変換されているので注意。

「株式投資メモ」(https://kabuoji3.com)というサイトがスクレイピング可能なので、プログラムがどう動くか確認しながら、HTMLから簡単なデータを取得する。(試しにSQLiteへ格納)

from bs4 import BeautifulSoup
import requests
import sqlite3    #SQLiteに格納するため使う

ライブラリはBeautifulSoupとrequestsを使う。
(pyqueryでもできるそうだけど、資料が少ないため断念。)

#銘柄コードを入力
#code = format(int(input("銘柄コードを入力してください:")),"04")
code = 7203    #トヨタ自動車
print(code)
year = 2019    #年
url =  "https://kabuoji3.com/stock/{}/{}/".format(code, year)
#url =  "https://kabuoji3.com/stock/" + code + "/" + year + "/" #でもOK
#print(url)

ここでurlが「https://kabuoji3.com/stock/7203/2019/」
(トヨタ自動車の2019年のページ)になればOK。

#header情報
headers = {"User-Agent":ユーザエージェントを記入}

#HTMLを取得
response = requests.get(url, headers = headers)
#print(response)

User-Agentは「ブラウザ名/ブラウザのバージョン」を入れればいい。
(例:Chrome/87.0.4280.88(現在のChromeのバージョン))
わからない場合は「ユーザエージェント 確認」と検索。

このときresponseは「<Response [200]>」と表示される。
ユーザエージェントの情報がないと「<Responce [403]>」と表示され、
Forbidden 403(アクセス権限がない)と同じ意味でアクセスできない。
このサイトに関してはユーザエージェント情報は必要。

#HTMLを抽出
soup = BeautifulSoup(response.content, "html.parser")
#print(soup)

ここまででsoupにurlのHTML情報が取得できる。
確認がてら#printをコメントアウトするとなっがい文が出力される。
サイトに行ってブラウザのデベロッパーツールで確認するとよい。

#銘柄名
name = soup.find("h1").text.split()[1]
#print(name)

#上場市場
market = soup.find(class_="dread").text.split("(")[0]
#print(market)

#業種
sector = soup.find(class_="dread").text.split("(")[1].split(")")[0]
#print(sector)

デベロッパーツールを見て、「銘柄名」、「上場市場」、「業種」の行を確認して、記載してあるタグやクラスを見つける。
(マウスカーソルを合わせて右クリック→「検証」か、デベロッパーツール内検索(Ctrl+F)で見つかる。)

余談:textに間違ってtext( )にしたところ
「TypeError: 'str' object is not callable」と表示された。
関数と変数が同じ名前の時に出るエラーらしく、
findメソッドが標準ライブラリとBeautifulSoupライブラリでバッティングしたせいだと思われる。

meigara = [[int(code),name,market,sector]]
#print(meigara)

#sqliteに格納
dbname = "kabuoji.db"
conn = sqlite3.connect(dbname)
cur = conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS meigara(code INTEGER PRIMARY KEY AUTOINCREMENT,\
   name STRING,market STRING,sector STRING)")
cur.executemany("INSERT INTO meigara VALUES(?,?,?,?)",meigara)
conn.commit()
conn.close()

このままではデータを取るだけなのでSQLiteに格納してみた。
二重リストに取得したデータを入れて、executeでSQL文を実行する。
dbnameで設定した名前のデータが作られるので、「DB Browser」などデータベースに関するファイルが開けるソフトをインストールすれば確認可能。
(SQLite格納やソフト操作方法に関しては調べ中。)

この記事が気に入ったらサポートをしてみませんか?