<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>気ままなブログ</title>
	<atom:link href="https://myfrankblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://myfrankblog.com</link>
	<description>人生で得た経験と知識をアウトプットします</description>
	<lastBuildDate>Mon, 02 Oct 2023 22:55:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.1</generator>

<image>
	<url>https://myfrankblog.com/wp-content/uploads/2019/08/cropped-イラスト-32x32.png</url>
	<title>気ままなブログ</title>
	<link>https://myfrankblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>2023年Q3（7〜9月）の運用実績（+ 99,151円）- 本業忙しくてほぼ株見てなかった。。。</title>
		<link>https://myfrankblog.com/trading_performance_2023q3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trading_performance_2023q3</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Mon, 02 Oct 2023 22:55:11 +0000</pubDate>
				<category><![CDATA[運用実績]]></category>
		<category><![CDATA[日本株]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[米国株]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15465</guid>

					<description><![CDATA[<p>こんにちは。TATです。 2023年Q3（7〜9月）の運用実績のご報告です。 &#160; 2023年Q3（7〜9月）の運用実績は、合計で+99,151円でした。 内訳は以下の通りです。 配当金および ...</p>
The post <a href="https://myfrankblog.com/trading_performance_2023q3/">2023年Q3（7〜9月）の運用実績（+ 99,151円）- 本業忙しくてほぼ株見てなかった。。。</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p><strong><span style="background-color: #ffff99;">2023年Q3（7〜9月）の運用実績</span></strong>のご報告です。</p>
<p>&nbsp;</p>
<p>2023年Q3（7〜9月）の運用実績は、合計で<strong>+99,151円</strong>でした。</p>
<p>内訳は以下の通りです。</p>
<ul>
<li>配当金および分配金：+ 132,641円</li>
<li>売買益：-33,490円</li>
<li>合計：+ 99,151円</li>
</ul>
<p>&nbsp;</p>
<p>ここで売買益に含めているのは、売却して利益が確定している銘柄です。</p>
<p>保有中銘柄の含み益・含み損は含まれません。</p>
<p>売買益はマイナスになりました。。。</p>

<p>&nbsp;</p>
<h2>2023年Q3（7〜9月）の運用実績（+ 99,151円）</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15471" src="https://myfrankblog.com/wp-content/uploads/2023/10/trading_performance_thumnail_2023q3.jpg" alt="" width="1200" height="844" srcset="https://myfrankblog.com/wp-content/uploads/2023/10/trading_performance_thumnail_2023q3.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/10/trading_performance_thumnail_2023q3-300x211.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/10/trading_performance_thumnail_2023q3-1024x720.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/10/trading_performance_thumnail_2023q3-150x106.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/10/trading_performance_thumnail_2023q3-768x540.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<h3>配当金および分配金の内訳</h3>
<p>まずは配当金および分配金の内訳です。</p>
<p>&nbsp;</p>
<p>2023年Q3（7〜9月）中に受け取った配当金および分配金の合計は<strong><span style="background-color: #ffff99;">132,641円</span></strong>でした。</p>
<p>内訳は次の通りです。</p>
<p>&nbsp;</p>
<ul>
<li>7814 日本創発グループ: 1,100円</li>
<li>IBM: 14,053円</li>
<li>JNJ: 7,037円</li>
<li>KO: 7,058円</li>
<li>MCD: 4,815円</li>
<li>MMM: 17,156円</li>
<li>PG: 5,876円</li>
<li>QQQ: 1,764円</li>
<li>SPYD: 13,880円</li>
<li>T: 17,033円</li>
<li>VT: 6,217円</li>
<li>VTI: 4,962円</li>
<li>VYM: 9,474円</li>
<li>VZ: 18,432円</li>
<li>WMT: 3,784円</li>
<li>合計: 132,641円</li>
</ul>
<p>&nbsp;</p>
<p>上記の通り、合計で132,641円の配当金をいただきました。</p>
<p>前年同期の配当金は92,960円でしたので、順調に積み上がってきました。</p>
<p>&nbsp;</p>
<p>ちなみに配当金を月ごとに見るとこんな感じです。9月に集中してますね。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15466" src="https://myfrankblog.com/wp-content/uploads/2023/10/dc289ed55c2b08309dcc936e53bcc9c2.png" alt="" width="1200" height="272" srcset="https://myfrankblog.com/wp-content/uploads/2023/10/dc289ed55c2b08309dcc936e53bcc9c2.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/10/dc289ed55c2b08309dcc936e53bcc9c2-300x68.png 300w, https://myfrankblog.com/wp-content/uploads/2023/10/dc289ed55c2b08309dcc936e53bcc9c2-1024x232.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/10/dc289ed55c2b08309dcc936e53bcc9c2-150x34.png 150w, https://myfrankblog.com/wp-content/uploads/2023/10/dc289ed55c2b08309dcc936e53bcc9c2-768x174.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>ばらつきがかなり大きいですが、9月みたいに1ヶ月で8万円とかもらえたら結構嬉しい。毎月10万くらいほしい。。。</p>
<p>&nbsp;</p>
<h3>売買益の内訳</h3>
<p>次に売買益について内訳を紹介していきます。</p>
<p>&nbsp;</p>
<p>売買益の結果としては、合計で-<span style="background-color: #ffff99;"><strong>33,490円</strong></span>でした。</p>
<div class="scroll-box">
<table class="dataframe" border="1">
<thead>
<tr style="text-align: justify;">
<th>証券コード</th>
<th>銘柄</th>
<th>数量</th>
<th>損益</th>
<th>利益率(%)</th>
</tr>
</thead>
<tbody>
<tr>
<td>2674</td>
<td>ハードオフコーポレーション</td>
<td>200株</td>
<td>9,125円</td>
<td>3.1%</td>
</tr>
<tr>
<td>3796</td>
<td>いい生活</td>
<td>500株</td>
<td>-8,261円</td>
<td>-2.48%</td>
</tr>
<tr>
<td>4019</td>
<td>スタメン</td>
<td>300株</td>
<td>-16,675円</td>
<td>-5.62%</td>
</tr>
<tr>
<td>4173</td>
<td>WACUL</td>
<td>600株</td>
<td>-27,112円</td>
<td>-4.46%</td>
</tr>
<tr>
<td>6850</td>
<td>チノー</td>
<td>100株</td>
<td>4,339円</td>
<td>1.93%</td>
</tr>
<tr>
<td>7814</td>
<td>日本創発グループ</td>
<td>400株</td>
<td>-2,475円</td>
<td>-1.01%</td>
</tr>
<tr>
<td>7818</td>
<td>トランザクション</td>
<td>200株</td>
<td>7,569円</td>
<td>2.08%</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>2023のQ3は全然バイバイしませんでした。</p>
<p>全部で7銘柄取引して、3勝4敗です。ボロボロですね。しかもマイナスの損失率が高い。。。</p>
<p>&nbsp;</p>
<h3>学びと今後の投資戦略</h3>
<p>2023年Q3の反省と今後の投資戦略についてまとめます。</p>
<p>今回はそもそも取引を全然してないので反省もないですw</p>
<p>&nbsp;</p>
<p>強いて反省を上げるなら本業との両立もっと頑張らないといけないということですかね。。。w</p>
<p>とりあえず本格的な売買再開に向けて色々動いてはいるのでそちらについて簡単にご紹介しておこうと思います。</p>
<p>&nbsp;</p>
<h4>新しいシステムを開発中。完成したら投資でニート生活をリニューアルしてnoteで提供しているデータもアップデートします。</h4>
<p>まず大きな変化をご紹介しておきます。</p>
<p>&nbsp;</p>
<p>現在、「<a href="https://investortat.com">投資でニート生活</a>」をリニューアルしようとしています。</p>
<p>X.comのAPIの条件も変わってきているので、発信する内容も変えたいと思ってます。</p>
<p>&nbsp;</p>
<p>これに伴い、ここまで色々溜まってきていたシステムに対する不満を一気に解決してやろうと、再始動してますw</p>
<p>「投資でニート生活」は、管理を楽にするためにwordpressに移行しようかなと思ったりもしています。</p>
<p>さらに「投資でニート生活」とは別に、レラティブストレングスなどの指標を簡単に見られるようにするためのダッシュボードを作ろうとしたりしています。</p>
<p>&nbsp;</p>
<p>ただ、まだまだ開発には時間がかかりそうでして、実際に移行できるのは年内にできればいい方かな？という感じのスピード感です。</p>
<p>また、レラティブストレングスについては、これまでは週次で更新していましたが、新しいシステムでは毎日更新するつもりなので精度も上がると思います。</p>
<p>&nbsp;</p>
<p>こんな感じですね。</p>
<blockquote class="twitter-tweet">
<p dir="ltr" lang="ja">だいぶプログラムができてきた</p>
<p>こんな感じで適当に証券コードをぶん投げればチャートが自動生成できるようになった</p>
<p>これをDashboardにしてもっとインタラクティブに動かせるようにしたい</p>
<p>チャートもカスタマイズできるようにしたい</p>
<p>一旦は僕が必要なものだけ実装しようと思う <a href="https://t.co/nZQCrw5rLQ">pic.twitter.com/nZQCrw5rLQ</a></p>
<p>— TAT@オニール流とミネルヴィニ流を日本株へ！ (@investortat) <a href="https://twitter.com/investortat/status/1702678772582101096?ref_src=twsrc%5Etfw">September 15, 2023</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>&nbsp;</p>
<p>完成までまだしばらくお待ちください。開発頑張ります。</p>
<p>&nbsp;</p>
<h4>本業が忙しくて手が回らない問題。10月から本気出すw</h4>
<p>最近、本業が忙しくなりつつあり、「投資でニート生活」の開発や株の分析に時間を全然使えていない状態です。</p>
<p>9月5日以降は全く売買もしていませんでした。。。</p>
<p>&nbsp;</p>
<p>10月になって少し落ち着きを取り戻してきたので、また活動を本格的に再開していきたいと思っています。</p>
<p>まずは分析のためにも一刻も早く新システムを作り上げたい。。。</p>
<p>&nbsp;</p>
<h3>アメリカ株のポートフォリオ</h3>
<p>最後に<span style="background-color: #ffff99;"><strong>アメリカ株のポートフォリオ</strong></span>の公開です。</p>
<p>&nbsp;</p>
<p>2023年9月末時点のアメリカ株のポートフォリオはこちらになります。</p>
<blockquote class="instagram-media" style="background: #FFF; border: 0; border-radius: 3px; box-shadow: 0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width: 540px; min-width: 326px; padding: 0; width: calc(100% - 2px);" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/Cx6ct39yItc/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14">
<div style="padding: 16px;">
<p>&nbsp;</p>
<div style="display: flex; flex-direction: row; align-items: center;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div>
</div>
</div>
<div style="padding: 19% 0;"></div>
<div style="display: block; height: 50px; margin: 0 auto 12px; width: 50px;"></div>
<div style="padding-top: 8px;">
<div style="color: #3897f0; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: 550; line-height: 18px;">この投稿をInstagramで見る</div>
</div>
<div style="padding: 12.5% 0;"></div>
<div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;">
<div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div>
<div style="background-color: #f4f4f4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div>
</div>
<div style="margin-left: 8px;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div>
<div style="width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg);"></div>
</div>
<div style="margin-left: auto;">
<div style="width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div>
<div style="background-color: #f4f4f4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div>
<div style="width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div>
</div>
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div>
</div>
<p>&nbsp;</p>
<p style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;"><a style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none;" href="https://www.instagram.com/p/Cx6ct39yItc/?utm_source=ig_embed&amp;utm_campaign=loading" target="_blank" rel="noopener">TAT@オニール流とミネルヴィニ流を日本株へ！(@investortat)がシェアした投稿</a></p>
</div>
</blockquote>
<p><script async src="//www.instagram.com/embed.js"></script></p>
<p>&nbsp;</p>
<p>今四半期も淡々と積み立てました。</p>
<ul>
<li>7月入金：30万円</li>
<li>8月入金：30万円</li>
<li>9月入金：30万円</li>
<li>配当金の再投資：132,641円</li>
</ul>
<p>よって、2023年Q3の3ヶ月間の合計投資金額は<strong> 1,032,641円</strong>でした。</p>
<p>&nbsp;</p>
<p>今四半期も合計投資額が100万円を超えました。</p>
<p>よくよく考えると年間で400万円投資に回してるって頭おかしいですよね。。。</p>
<p>もうちょっと家族と使っちゃってもいいのかなと感じる今日この頃です笑</p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>ここでは<strong><span style="background-color: #ffff99;">2023年Q3（7〜9月）の運用実績</span></strong>を報告しました。</p>
<p>2023年Q3（7〜9月）の運用実績は、合計で<strong>+99,151円</strong>でした。</p>
<p>&nbsp;</p>
<p>今期は本業が忙しくて、株のための時間がなかなか取れない状況でしたが、10月からは少しずつ再開していきたいです。</p>
<p>でもそのためには今開発しているシステムを作り上げる必要があるので、しばらくこっちにコミットしようと思います。</p>
<p>&nbsp;</p>
<p><a href="https://twitter.com/investortat">Twitter</a>や<a href="https://www.instagram.com/investortat/">Instagram</a>でも発信していますので是非ともフォローしていただけると嬉しいです。</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p>&nbsp;</p>The post <a href="https://myfrankblog.com/trading_performance_2023q3/">2023年Q3（7〜9月）の運用実績（+ 99,151円）- 本業忙しくてほぼ株見てなかった。。。</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2023年Q2（4〜6月）の運用実績（+ 190,188円）- 乖離率を考慮したら精度が上がった -</title>
		<link>https://myfrankblog.com/trading_performance_2023q2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trading_performance_2023q2</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sun, 02 Jul 2023 00:00:02 +0000</pubDate>
				<category><![CDATA[運用実績]]></category>
		<category><![CDATA[日本株]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[米国株]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15443</guid>

					<description><![CDATA[<p>こんにちは。TATです。 2023年Q2（4〜6月）の運用実績のご報告です。 &#160; 2023年Q2（4〜6月）の運用実績は、合計で+190,188円でした。 内訳は以下の通りです。 配当金およ ...</p>
The post <a href="https://myfrankblog.com/trading_performance_2023q2/">2023年Q2（4〜6月）の運用実績（+ 190,188円）- 乖離率を考慮したら精度が上がった -</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p><strong><span style="background-color: #ffff99;">2023年Q2（4〜6月）の運用実績</span></strong>のご報告です。</p>
<p>&nbsp;</p>
<p>2023年Q2（4〜6月）の運用実績は、合計で<strong>+190,188円</strong>でした。</p>
<p>内訳は以下の通りです。</p>
<ul>
<li>配当金および分配金：+ 134,519円</li>
<li>売買益：+55,669円</li>
<li>合計：+ 190,188円</li>
</ul>
<p>&nbsp;</p>
<p>ここで売買益に含めているのは、売却して利益が確定している銘柄です。</p>
<p>保有中銘柄の含み益・含み損は含まれません。</p>
<p>&nbsp;</p>
<p>小学ですが、今四半期も売買益はなんとかプラスに維持することができました。</p>

<p>&nbsp;</p>
<h2>2023年Q2（4〜6月）の運用実績（+ 190,188円）</h2>
<p>&nbsp;</p>
<h3>配当金および分配金の内訳</h3>
<p>まずは配当金および分配金の内訳です。</p>
<p>&nbsp;</p>
<p>2023年Q2（4〜6月）中に受け取った配当金および分配金の合計は<span style="background-color: #ffff99;"><strong>134,519円</strong></span>でした。</p>
<p>内訳は次の通りです。</p>
<p>&nbsp;</p>
<ul>
<li>7191 イントラスト: 1,400円</li>
<li>HDV: 7,811円</li>
<li>IBM: 13,327円</li>
<li>JNJ: 6,681円</li>
<li>KO: 5,951円</li>
<li>MCD: 4,638円</li>
<li>MMM: 13,600円</li>
<li>PG: 5,488円</li>
<li>QQQ: 1,571円</li>
<li>SPYD: 14,064円</li>
<li>T: 12,828円</li>
<li>VT: 9,615円</li>
<li>VTI: 4,960円</li>
<li>VYM: 10,208円</li>
<li>VZ: 15,662円</li>
<li>WMT: 6,715円</li>
<li>合計: 134,519円</li>
</ul>
<p>&nbsp;</p>
<p>上記の通り、合計で134,519円の配当金をいただきました。</p>
<p>2022年Q2の配当金は81,388円だったので、ざっくり1.5倍です。順調に増えています。</p>
			<a href="https://myfrankblog.com/trading_performance_2022q2/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1280" height="900" src="https://myfrankblog.com/wp-content/uploads/2022/07/performance_thumnail_2022_q2.jpg" class="attachment-full size-full wp-post-image" alt="2022年Q2（4〜6月）の運用実績（-122,018円）" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/07/performance_thumnail_2022_q2.jpg 1280w, https://myfrankblog.com/wp-content/uploads/2022/07/performance_thumnail_2022_q2-300x211.jpg 300w, https://myfrankblog.com/wp-content/uploads/2022/07/performance_thumnail_2022_q2-1024x720.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2022/07/performance_thumnail_2022_q2-150x105.jpg 150w, https://myfrankblog.com/wp-content/uploads/2022/07/performance_thumnail_2022_q2-768x540.jpg 768w" sizes="(max-width: 1280px) 100vw, 1280px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">2022年Q2（4〜6月）の運用実績（-122,018円）</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<p>ちなみに配当金を月ごとに見るとこんな感じです。</p>
<p>6月がダントツで多いです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15444" src="https://myfrankblog.com/wp-content/uploads/2023/07/872a87ff051f259f70facbe931ca6ead.png" alt="" width="929" height="436" srcset="https://myfrankblog.com/wp-content/uploads/2023/07/872a87ff051f259f70facbe931ca6ead.png 929w, https://myfrankblog.com/wp-content/uploads/2023/07/872a87ff051f259f70facbe931ca6ead-300x141.png 300w, https://myfrankblog.com/wp-content/uploads/2023/07/872a87ff051f259f70facbe931ca6ead-150x70.png 150w, https://myfrankblog.com/wp-content/uploads/2023/07/872a87ff051f259f70facbe931ca6ead-768x360.png 768w" sizes="(max-width: 929px) 100vw, 929px" /></p>
<p>&nbsp;</p>
<h3>売買益の内訳</h3>
<p>次に売買益について内訳を紹介していきます。</p>
<p>&nbsp;</p>
<p>売買益の結果としては、合計で<span style="background-color: #ffff99;"><strong>+55,669円</strong></span>でした。</p>
<div class="scroll-box">
<table class="dataframe" border="1">
<thead>
<tr style="text-align: justify;">
<th>証券コード</th>
<th>銘柄</th>
<th>数量</th>
<th>損益</th>
<th>利益率(%)</th>
</tr>
</thead>
<tbody>
<tr>
<td>2674</td>
<td>ハードオフコーポレーション</td>
<td>100株</td>
<td>-5,390円</td>
<td>-3.83%</td>
</tr>
<tr>
<td>3300</td>
<td>ホールディングス</td>
<td>200株</td>
<td>24,290円</td>
<td>16.26%</td>
</tr>
<tr>
<td>3854</td>
<td>アイル</td>
<td>100株</td>
<td>-8,771円</td>
<td>-3.02%</td>
</tr>
<tr>
<td>3924</td>
<td>ランドコンピュータ</td>
<td>300株</td>
<td>44,449円</td>
<td>12.8%</td>
</tr>
<tr>
<td>4380</td>
<td>Mマート</td>
<td>200株</td>
<td>-13,475円</td>
<td>-4.49%</td>
</tr>
<tr>
<td>4421</td>
<td>ディ・アイ・システム</td>
<td>200株</td>
<td>-4,861円</td>
<td>-2.33%</td>
</tr>
<tr>
<td>4712</td>
<td>KeyHolder</td>
<td>200株</td>
<td>-11,861円</td>
<td>-5.56%</td>
</tr>
<tr>
<td>6199</td>
<td>セラク</td>
<td>200株</td>
<td>8,769円</td>
<td>2.91%</td>
</tr>
<tr>
<td>7191</td>
<td>イントラスト</td>
<td>200株</td>
<td>-7,660円</td>
<td>-3.94%</td>
</tr>
<tr>
<td>7818</td>
<td>トランザクション</td>
<td>200株</td>
<td>-13,380円</td>
<td>-4.12%</td>
</tr>
<tr>
<td>8877</td>
<td>エスリード</td>
<td>100株</td>
<td>19,359円</td>
<td>8.44%</td>
</tr>
<tr>
<td>8923</td>
<td>トーセイ</td>
<td>100株</td>
<td>25,410円</td>
<td>16.5%</td>
</tr>
<tr>
<td>8934</td>
<td>サンフロンティア不動産</td>
<td>100株</td>
<td>-1,210円</td>
<td>-0.92%</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>結構売買してますね。</p>
<p>全部で13銘柄取引して、5勝8敗です。</p>
<p>&nbsp;</p>
<p>余裕の負け越しです。それでも全体ではプラスとなりました。</p>
<p>これは損切りが素早くできたことが要因と思います。</p>
<p>&nbsp;</p>
<h3>学びと今後の投資戦略</h3>
<p>2023年Q2の反省と今後の投資戦略についてまとめます。</p>
<p>新たな発見をしてから投資の精度が改善しました。</p>
<p>&nbsp;</p>
<h4>52週高値と50日移動平均線との乖離率を見たら精度が上がった</h4>
<p>5月の後半、チャートを見てたらふとこんなことに気づきました。</p>
<p>&nbsp;</p>
<div class="st-kaiwa-box kaiwaicon1 clearfix"><div class="st-kaiwa-face"><img src="https://myfrankblog.com/wp-content/uploads/2020/12/1d61a915d4cf86f3e437d09e11e446c9.png" width="60px"><div class="st-kaiwa-face-name">TAT</div></div><div class="st-kaiwa-area"><div class="st-kaiwa-hukidashi"></p>
<p>ボックス理論に加えて、50日移動平均線との乖離率を見ればいいのではないか？</p>
<p></div></div></div>
<p>&nbsp;</p>
<p>これまではボックス理論をメインで使っていたのですが、どうもうまくいくことと失敗することが両極端で、大きな利益はなかなか取れない状況が続いていました。</p>
<p>失敗した投資を見ていくと、<strong><span style="background-color: #ffff99;">どうやらエントリー時で50日移動平均線から現在の株価がかなり乖離している</span></strong>ことが多かったことに気づきました。</p>
<p>20％を超えた乖離をしている場合も結構ありました。</p>
<p>&nbsp;</p>
<p>乖離率を見ると、買われすぎ、売られすぎの判断をすることができます。</p>
			<a href="https://myfrankblog.com/calculate_deviation_rate_of_moving_average/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="594" src="https://myfrankblog.com/wp-content/uploads/2022/05/1212ebbf89386ec9412377fd8dfc3c3a.png" class="attachment-full size-full wp-post-image" alt="【Pythonで株式投資】移動平均線乖離率を計算して「買われすぎ・売られ過ぎ」を判定する" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/05/1212ebbf89386ec9412377fd8dfc3c3a.png 1200w, https://myfrankblog.com/wp-content/uploads/2022/05/1212ebbf89386ec9412377fd8dfc3c3a-300x149.png 300w, https://myfrankblog.com/wp-content/uploads/2022/05/1212ebbf89386ec9412377fd8dfc3c3a-1024x507.png 1024w, https://myfrankblog.com/wp-content/uploads/2022/05/1212ebbf89386ec9412377fd8dfc3c3a-150x74.png 150w, https://myfrankblog.com/wp-content/uploads/2022/05/1212ebbf89386ec9412377fd8dfc3c3a-768x380.png 768w, https://myfrankblog.com/wp-content/uploads/2022/05/1212ebbf89386ec9412377fd8dfc3c3a-1536x761.png 1536w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">Pythonで株価の移動平均線乖離率を計算して「買われすぎ・売られ過ぎ」を判定する</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<p>色々と思考をめぐらしながらチャートを眺めた結果、次のように考えに至りました。</p>
<div class="st-kaiwa-box kaiwaicon1 clearfix"><div class="st-kaiwa-face"><img src="https://myfrankblog.com/wp-content/uploads/2020/12/1d61a915d4cf86f3e437d09e11e446c9.png" width="60px"><div class="st-kaiwa-face-name">TAT</div></div><div class="st-kaiwa-area"><div class="st-kaiwa-hukidashi"></p>
<p>ボックス理論に加えて、次の2つの乖離率を考慮した上で投資を判断する。</p>
<ul>
<li>52週高値と50日移動平均線の乖離率</li>
<li>直近の終値と50日移動平均線の乖離率</li>
</ul>
<p></div></div></div>
<p>&nbsp;</p>
<p>そして乖離率の計算の仕方は、通常のやり方と少し変えました。</p>
<p>ほとんどの場合、50日移動平均線に対する乖離率を計算します。</p>
<p>この場合、例えば、終値と50日移動平均線の乖離率は、終値が移動平均線の上にいればプラス、下にいればマイナスになります。</p>
<p>&nbsp;</p>
<p>しかし、僕の場合は乖離率を損切りポイントの目安として活用したかったので、終値に対する50日移動平均線の乖離率を計算しました。</p>
<p>こうすることで、<strong>直近の終値から何％下落したら50日移動平均線に接するのか</strong>を把握することができます。</p>
<p>50日移動平均線よりも終値が下にいる銘柄についてはそもそも投資の対象から外しています。</p>
<p>&nbsp;</p>
<p>52週高値と50日移動平均線の乖離率も同様の計算方法です。</p>
<p>つまり、52週高値から何％下落したら50日移動平均線に接するのかを把握するために利用します。</p>
<p>&nbsp;</p>
<p>この乖離率が僕が個人的に利用している損切りポイントである8％未満であれば、損切りをリスクは大きく下げることができます。</p>
<p>実際、このやり方を取り込んでからは成績が明らかに良くなりました。</p>
<p>損切りのリスクが小さくなったので、損小利大になりました。</p>
<p>もちろん、条件が厳しくなった分、エントリーするチャンスも減ってしまうのですが、それでも勝率が改善するなら全然OKです。</p>
<p>&nbsp;</p>
<p>そして月別の売買益をまとめるとこんな感じのなります。</p>
<p>乖離率を考慮した5月後半から精度が上がり、6月にいくつか利確してそこそこの利益を取ることができました。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15445" src="https://myfrankblog.com/wp-content/uploads/2023/07/64b4b87733d2b97c02935a98e4c332f1.png" alt="" width="922" height="429" srcset="https://myfrankblog.com/wp-content/uploads/2023/07/64b4b87733d2b97c02935a98e4c332f1.png 922w, https://myfrankblog.com/wp-content/uploads/2023/07/64b4b87733d2b97c02935a98e4c332f1-300x140.png 300w, https://myfrankblog.com/wp-content/uploads/2023/07/64b4b87733d2b97c02935a98e4c332f1-150x70.png 150w, https://myfrankblog.com/wp-content/uploads/2023/07/64b4b87733d2b97c02935a98e4c332f1-768x357.png 768w" sizes="(max-width: 922px) 100vw, 922px" /></p>
<p>&nbsp;</p>
<p>ちなみにこの方法をやろうと決めてから、<a href="https://note.com/investortat">note</a>で提供しているレポートにも乖離率を追加しました。</p>
<p>レポートを見れば52週高値、終値に対する50日移動平均線の乖離率が一目で確認することができるので、効率的に銘柄選定を行うことができるようになりました。</p>
<p>&nbsp;</p>
<p>例として、うまくいった銘柄を1つだけご紹介しておきます。</p>
<p>トーセイです。</p>
<p>監視銘柄への登録、52週高値更新、乖離率が10％未満と全ての条件を満たしていました。</p>
<blockquote class="instagram-media" style="background: #FFF; border: 0; border-radius: 3px; box-shadow: 0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width: 540px; min-width: 326px; padding: 0; width: calc(100% - 2px);" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/Cs3wRVOvYzE/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14">
<div style="padding: 16px;">
<p>&nbsp;</p>
<div style="display: flex; flex-direction: row; align-items: center;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div>
</div>
</div>
<div style="padding: 19% 0;"></div>
<div style="display: block; height: 50px; margin: 0 auto 12px; width: 50px;"></div>
<div style="padding-top: 8px;">
<div style="color: #3897f0; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: 550; line-height: 18px;">この投稿をInstagramで見る</div>
</div>
<div style="padding: 12.5% 0;"></div>
<div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;">
<div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div>
<div style="background-color: #f4f4f4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div>
</div>
<div style="margin-left: 8px;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div>
<div style="width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg);"></div>
</div>
<div style="margin-left: auto;">
<div style="width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div>
<div style="background-color: #f4f4f4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div>
<div style="width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div>
</div>
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div>
</div>
<p>&nbsp;</p>
<p style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;"><a style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none;" href="https://www.instagram.com/p/Cs3wRVOvYzE/?utm_source=ig_embed&amp;utm_campaign=loading" target="_blank" rel="noopener">TAT@投資でニート生活(@investortat)がシェアした投稿</a></p>
</div>
</blockquote>
<p><script src="//www.instagram.com/embed.js" async=""></script></p>
<p>&nbsp;</p>
<h4>近々レポートをアップデートしようと思っています</h4>
<p>乖離率の発見をしてから、noteで提供するレポートをアップデートしようと思っています。</p>
<p>すでに乖離率は追加したのですが、これを日別で確認できるようにチャートに加えようと思っています。</p>
<p>&nbsp;</p>
<p>他にもいくつかの点でレポートを修正したい部分があります。</p>
<p>ちょっと最近は仕事が忙しくて時間があまり取れないのですが、どうにか時間を作ってレポートをアップデートさせようと思っています。</p>
<p>もう少々お待ちください。</p>
<p>&nbsp;</p>
<h3>アメリカ株のポートフォリオ</h3>
<p>最後に<span style="background-color: #ffff99;"><strong>アメリカ株のポートフォリオ</strong></span>の公開です。</p>
<p>&nbsp;</p>
<p>2023年6月末時点のアメリカ株のポートフォリオはこちらになります。</p>
<blockquote class="instagram-media" style="background: #FFF; border: 0; border-radius: 3px; box-shadow: 0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width: 540px; min-width: 326px; padding: 0; width: calc(100% - 2px);" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/CuJ7NckvlJW/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14">
<div style="padding: 16px;">
<p>&nbsp;</p>
<div style="display: flex; flex-direction: row; align-items: center;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div>
</div>
</div>
<div style="padding: 19% 0;"></div>
<div style="display: block; height: 50px; margin: 0 auto 12px; width: 50px;"></div>
<div style="padding-top: 8px;">
<div style="color: #3897f0; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: 550; line-height: 18px;">この投稿をInstagramで見る</div>
</div>
<div style="padding: 12.5% 0;"></div>
<div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;">
<div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div>
<div style="background-color: #f4f4f4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div>
</div>
<div style="margin-left: 8px;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div>
<div style="width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg);"></div>
</div>
<div style="margin-left: auto;">
<div style="width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div>
<div style="background-color: #f4f4f4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div>
<div style="width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div>
</div>
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div>
</div>
<p>&nbsp;</p>
<p style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;"><a style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none;" href="https://www.instagram.com/p/CuJ7NckvlJW/?utm_source=ig_embed&amp;utm_campaign=loading" target="_blank" rel="noopener">TAT@投資でニート生活(@investortat)がシェアした投稿</a></p>
</div>
</blockquote>
<p><script async src="//www.instagram.com/embed.js"></script></p>
<p>&nbsp;</p>
<p>今四半期も淡々と積み立てました。</p>
<ul>
<li>4月入金：30万円</li>
<li>5月入金：30万円</li>
<li>6月入金：30万円</li>
<li>配当金の再投資：134,519円</li>
</ul>
<p>よって、2023年Q2の3ヶ月間の合計投資金額は<strong> 1,034,519円</strong>でした。</p>
<p>&nbsp;</p>
<p>四半期の合計投資額が100万円を超えました。</p>
<p>配当金を再投資しているのが結構効いてる感じですね。</p>
<p>&nbsp;</p>
<p>このまま継続していきます。</p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>ここでは<strong><span style="background-color: #ffff99;">2023年Q2（4〜6月）の運用実績</span></strong>を報告しました。</p>
<p>2023年Q2（4〜6月）の運用実績は、合計で<strong>+190,188円</strong>でした。</p>
<p>&nbsp;</p>
<p>2023年Q1に続き、Q2でもプラスを維持することができました。</p>
<p>売買益をプラスで維持できたのは嬉しいですね。</p>
<p>そして乖離率を考慮してからは精度が上がったので、今後はさらに利益を伸ばしていければ嬉しいですね。</p>
<p>&nbsp;</p>
<p><a href="https://note.com/investortat">note</a>で提供しているレポートも時間見つけてアップデートします。</p>
			<a href="https://myfrankblog.com/index/about_data_in_note/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/2b530e80c7d0de90885e285c5d798063.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/2b530e80c7d0de90885e285c5d798063.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/2b530e80c7d0de90885e285c5d798063-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/2b530e80c7d0de90885e285c5d798063-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/2b530e80c7d0de90885e285c5d798063-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/2b530e80c7d0de90885e285c5d798063-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【随時更新】「TATの日本成長株投資研究所」で提供するデータについて【ExcelやPDF形式など】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<p><a href="https://twitter.com/investortat">Twitter</a>や<a href="https://www.instagram.com/investortat/">Instagram</a>でも発信していますので是非ともフォローしていただけると嬉しいです。</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p>&nbsp;</p>The post <a href="https://myfrankblog.com/trading_performance_2023q2/">2023年Q2（4〜6月）の運用実績（+ 190,188円）- 乖離率を考慮したら精度が上がった -</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>スクレイピングとは？Pythonでデータ収集の可能性を無限大に広げるための究極ガイド</title>
		<link>https://myfrankblog.com/complete_guide_for_scraping/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=complete_guide_for_scraping</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 10 Jun 2023 09:00:15 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15414</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「スクレピングとは何か？」です。 &#160; 悩んでいる人 スクレイピングってなんだろう？ウェブからデータを収集する技術であることは聞いたことあるけど細かいこ ...</p>
The post <a href="https://myfrankblog.com/complete_guide_for_scraping/">スクレイピングとは？Pythonでデータ収集の可能性を無限大に広げるための究極ガイド</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<strong><span style="background-color: #ffff00;">スクレピングとは何か？</span></strong>」です。</p>
<p>&nbsp;</p>
<div class="st-kaiwa-box kaiwaicon2 clearfix"><div class="st-kaiwa-face"><img src="https://myfrankblog.com/wp-content/uploads/2020/12/2.png" width="60px"><div class="st-kaiwa-face-name">悩んでいる人</div></div><div class="st-kaiwa-area"><div class="st-kaiwa-hukidashi"></p>
<p>スクレイピングってなんだろう？ウェブからデータを収集する技術であることは聞いたことあるけど細かいことはよくわからない。どんな場面で活用できるのだろうか・・・</p>
<p></div></div></div>
<p>&nbsp;</p>
<p>上記の疑問に答えていきます。</p>
<p>&nbsp;</p>
<p class="h4modoki">本記事の信憑性</p>
<div class="st-kaiwa-box kaiwaicon1 clearfix"><div class="st-kaiwa-area2"><div class="st-kaiwa-hukidashi2"></p>
<p><span style="font-size: 120%;"><strong>TATのプロフィール（2023年3月現在）</strong></span></p>
<ul>
<li><span style="font-size: 90%;">社会人になってからPythonを独学して転職に成功</span></li>
<li><span style="font-size: 90%;">これまでPythonを使ったデータ分析、AI開発、ダッシュボード開発、プロセスオートメーションなどの業務に従事</span></li>
<li><span style="font-size: 90%;">IT→金融→不動産→アドテク（全て外資系企業）と、色々な業界を渡り歩きながら経験とスキルを積んでいます</span></li>
<li><span style="font-size: 90%;"><a href="https://www.oanda.jp/lab-education/api/usage10/python_back_test_conduct/">OANDA証券</a>や<a href="https://www.octoparse.jp/blog/the-importance-of-ulternative-data-utilization/">Octoparse</a>などに技術系の記事を提供</span></li>
</ul>
<p></div></div><div class="st-kaiwa-face2"><img src="https://myfrankblog.com/wp-content/uploads/2020/12/1d61a915d4cf86f3e437d09e11e446c9.png" width="60px"><div class="st-kaiwa-face-name2">TAT</div></div></div>
<p>&nbsp;</p>
<p>スクレイピングは、<span style="background-color: #ffff00;"><strong>ウェブ上にあるデータを抽出する技術</strong></span>のことを指します。</p>
<p>スクレイピングを使えば、ウェブ上にある大量の情報の効率的に収集することができ、そのデータをビジネスや研究などに活用することができます。</p>
<p>&nbsp;</p>
<p>業務効率化の観点でもスクレイピングは便利です。</p>
<p>マニュアルでウェブサイトから情報を収集する場合、1つ2つなら問題ありませんが数百個、数千個になってくると大変な作業になってきます。</p>
<p>スクレイピングを活用すればこういった作業を自動化でき、さらに定期的に実行すれば日々の業務を完全自動化することも可能です。</p>
<p>&nbsp;</p>
<p>情報の価値が高まりつつある現在の情報社会においては、いかにたくさんの価値ある情報を収集できるかが重要になってくる場面があります。</p>
<p>スクレイピングの技術があればこういった場面で優位に立つことができます。</p>
<p>&nbsp;</p>
<p>本記事では、スクレイピングについて紹介します。</p>
<p>スクレイピングとは何か、スクレイピングで何ができるのか、さらにスクレイピングを関連の強いPythonについても紹介していきます。</p>
<p>この記事を読んでいただくと、スクレイピングの基本を理解することができ、スクレイピングを実践するために必要なプロセスがわかります。</p>
<p>スクレピングについて知りたい、スクレピングを勉強してみたい、という方は是非とも最後まで読んでいただけると嬉しいです。</p>

<p>&nbsp;</p>
<h2>スクレイピングとは何か？</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15434" src="https://myfrankblog.com/wp-content/uploads/2023/06/question-g07c278bc7_1280.jpg" alt="スクレイピングとは何か？" width="1200" height="702" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/question-g07c278bc7_1280.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/06/question-g07c278bc7_1280-300x176.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/06/question-g07c278bc7_1280-1024x599.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/06/question-g07c278bc7_1280-150x88.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/06/question-g07c278bc7_1280-768x449.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>まずは<strong><span style="background-color: #ffff99;">スクレイピング</span></strong>について紹介していきます。</p>
<p>&nbsp;</p>
<p>スクレイピングとは、<strong>広義にはデータを収集して整理する作業のこと</strong>を指します。</p>
<p>ただし、ここでは特に<strong>Webスクレイピング</strong>について焦点を当てて紹介していきます。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>Webスクレイピングとは？</p><div class="st-in-mybox">
<p>Webスクレイピングとは、インターネット上のウェブページから情報を自動的に取り出す技術のことを指します。</p>
</div></div>
<p>&nbsp;</p>
<p>実際の工程では、プログラムがウェブサイトを巡回し、HTMLやCSSなどのコードを解析してデータを抽出します。</p>
<p>これにより、大量のウェブページから情報を効率的に収集することが可能になります。</p>
<p>&nbsp;</p>
<h2>スクレイピングで何ができるのか</h2>
<p>次に<span style="background-color: #ffff99;"><strong>スクレイピングの利用例</strong></span>を紹介します。</p>
<p>スクレイピングを使うと、具体的にどんなことができるのでしょうか。</p>
<p>&nbsp;</p>
<h3>データ収集</h3>
<p>スクレイピングを利用する最大のメリットはやはり<span style="background-color: #ffff99;"><strong>データ収集</strong></span>です。</p>
<p>手動で大量のデータを集めるのは大変ですが、スクレイピングを活用すれば効率的に収集することができます。</p>
<p>&nbsp;</p>
<p>例えば、株式投資の場面では、株価データや業績データなどをスクレイピングで収集して、それらを活用して投資判断を下すことができます。</p>
			<a href="https://myfrankblog.com/developed_website_from_scratch/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2021/10/5.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/10/5.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2021/10/5-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2021/10/5-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2021/10/5-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2021/10/5-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">Pythonを独学して株式投資に必要な情報を管理するサイトを自作したお話。</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<p>また、不動産業者であれば、複数の物件の情報を収集し、適正価格を判断することが可能です。</p>
			<a href="https://myfrankblog.com/machine-learning-analysis-for-real-states-data/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="900" src="https://myfrankblog.com/wp-content/uploads/2020/06/kevin-ku-w7ZyuGYNpRQ-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="【Pythonで不動産データ分析！】機械学習(ランダムフォレスト)を用いてSUUMOからお得物件を探してみた！" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2020/06/kevin-ku-w7ZyuGYNpRQ-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2020/06/kevin-ku-w7ZyuGYNpRQ-unsplash-300x225.jpg 300w, https://myfrankblog.com/wp-content/uploads/2020/06/kevin-ku-w7ZyuGYNpRQ-unsplash-1024x768.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2020/06/kevin-ku-w7ZyuGYNpRQ-unsplash-768x576.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonで不動産データ分析！】機械学習(ランダムフォレスト)を用いてSUUMOからお得物件を探してみた！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>市場調査</h3>
<p><span style="background-color: #ffff99;"><strong>市場調査</strong></span>もスクレイピングを活用できる場面の1つです。</p>
<p>&nbsp;</p>
<p>商品やサービスの評価や価格、ユーザーのフィードバックなどを収集し、市場の動向を把握することが可能です。</p>
<p>例えば、新商品を開発する際に、同じカテゴリーの既存商品の評価や価格、ユーザーフィードバックを収集し、それを基に商品開発を進めることが可能です。</p>
<p>&nbsp;</p>
<h3>データ分析</h3>
<p><span style="background-color: #ffff99;"><strong>データ分析</strong></span>のためにスクレイピングでデータを収集することはよくあります。</p>
<p>収集したデータを分析することで、新たな知見を得ることができます。</p>
<p>&nbsp;</p>
<p>特にビジネスにおける用途は多いです。</p>
<p>データを活用して判断することをデータドリブンといったりもしますが、こういった判断を行うためにはきちんとデータを見て判断することが大事です。</p>
<p>&nbsp;</p>
<p>例えば、スクレイピングで収集したユーザーレビューや評価データを分析し、商品やサービスの強みや弱み、改善点を発見することが可能です。</p>
<p>スクレイピングを使えば、こういった分析・判断のために必要なデータを効率的に収集することができます。</p>
			<a href="https://myfrankblog.com/compare_tabelog_with_google_data/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="848" src="https://myfrankblog.com/wp-content/uploads/2021/10/google-g8bcc0150e_1280.jpg.png" class="attachment-full size-full wp-post-image" alt="【禁断の比較】食べログとGoogleのレビューデータを比較する【Pythonでデータ分析】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/10/google-g8bcc0150e_1280.jpg.png 1200w, https://myfrankblog.com/wp-content/uploads/2021/10/google-g8bcc0150e_1280.jpg-300x212.png 300w, https://myfrankblog.com/wp-content/uploads/2021/10/google-g8bcc0150e_1280.jpg-1024x723.png 1024w, https://myfrankblog.com/wp-content/uploads/2021/10/google-g8bcc0150e_1280.jpg-150x106.png 150w, https://myfrankblog.com/wp-content/uploads/2021/10/google-g8bcc0150e_1280.jpg-768x542.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【禁断の比較】食べログとGoogleのレビューデータを比較する【Pythonでデータ分析】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>オートメーション</h3>
<p>そして最後に、<span style="background-color: #ffff99;"><strong>日々の繰り返し作業を自動化する</strong></span>ことも可能です。</p>
<p>&nbsp;</p>
<p>ログイン操作、フォームの入力、ボタンのクリックなどの一連の操作を自動化することで、作業効率を大幅に向上させることができます。</p>
<p>例えば、毎日定時にウェブサイトの情報を確認する必要がある場合、その作業をスクリプト化し、自動化することが可能です。</p>
<p>&nbsp;</p>
<p>日々の繰り返し業務から解放されることで、少し早く帰宅することもできますし、空いた時間を使って別の業務を行うこともできます。</p>
<p>&nbsp;</p>
<p>このように、スクレイピングはたくさんの場面で活用することができます。</p>
<p>日々の作業を効率化することができるので、スクレイピングのスキルを持っておくと重宝される場面がたくさんあります。</p>
<p>&nbsp;</p>
<h2>スクレイピングの注意点</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15435" src="https://myfrankblog.com/wp-content/uploads/2023/06/stop-ga9419cad6_1280.jpg" alt="スクレイピングの注意点" width="1200" height="675" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/stop-ga9419cad6_1280.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/06/stop-ga9419cad6_1280-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/06/stop-ga9419cad6_1280-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/06/stop-ga9419cad6_1280-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/06/stop-ga9419cad6_1280-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>スクレイピングはさまざまな用途に利用できるとても強力な技術ですが<span style="background-color: #ffff99;"><strong>注意点</strong></span>もあります。</p>
<p>ここで、スクレイピングを行う際に注意すべき点について簡単にまとめます。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#ffebee;border-color:#ef9a9a;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#ef5350;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-exclamation-circle st-css-no" aria-hidden="true"></i>スクレイピングを行う際の注意ポイント</p><div class="st-in-mybox">
<ul>
<li>著作権</li>
<li>個人情報の扱い</li>
<li>利用規約</li>
<li>サーバーへの負荷</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>きちんとルールを守って行うことが大切です。</p>
<p>&nbsp;</p>
<h3>著作権</h3>
<p>1つ目は<span style="background-color: #ffff99;"><strong>著作権</strong></span>です。</p>
<p>基本的に、自分自身の業務効率化を目的としている場合や分析のための情報収集などについては問題なしとされています。</p>
<p>ただし、収集したデータをそのまま第三者に提供するとか、取得したデータをそのまま利用する場合には注意が必要です。</p>
<p>&nbsp;</p>
<h3>個人情報の扱い</h3>
<p>収集する情報に<span style="background-color: #ffff99;"><strong>個人情報</strong></span>が含まれている場合には注意が必要です。</p>
<p>&nbsp;</p>
<p>個人を特定可能な情報を含むデータをスクレイピングする場合、<strong>データ保護法に違反する可能性</strong>があります。</p>
<p>個人情報が含まれているようなデータはスクレイピングしない方が無難です。</p>
<p>&nbsp;</p>
<h3>利用規約</h3>
<p>スクレイピングを行う際には、<span style="background-color: #ffff99;"><strong>サイトの</strong><strong>利用規約</strong></span>も確認する必要があります。</p>
<p>&nbsp;</p>
<p>サイトによっては、「スクレイピングを禁止する」と<strong>利用規約に明記している</strong>場合もあります。</p>
<p>この場合、スクレイピングするのはアウトです。</p>
<p>スクレイピングする際にはきちんと確認するようにしましょう。</p>
<p>&nbsp;</p>
<h3>サーバーへの負荷</h3>
<p>最後に<span style="background-color: #ffff99;"><strong>サーバーへの負荷</strong></span>も考慮しましょう。</p>
<p>&nbsp;</p>
<p>利用規約に「スクレイピングの禁止」との記載がなくても、「サーバーに過度な負担を与える行為を禁止とする」みたいな書き方がされている場合も結構あります。</p>
<p>この場合、スクレイピングはアウトではありませんが、サーバーへの負荷は考慮しなくてはいけません。</p>
<p>&nbsp;</p>
<p><strong>一度に大量のリクエストを送るようなやり方は避けるべき</strong>です。</p>
<p>基本的に、<span style="background-color: #ffff99;"><strong>いかなるサイトをスクレイピングする場合においても、このサーバー負担を考えたプログラムを設計することが大切</strong></span>です。</p>
<p><strong>やりすぎるとアクセスブロックされる場合もあります</strong>ので気をつけてください。</p>
<p>&nbsp;</p>
<h2>Pythonとスクレイピング</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15436" src="https://myfrankblog.com/wp-content/uploads/2023/06/hitesh-choudhary-D9Zow2REm8U-unsplash.jpg" alt="Pythonとスクレイピング" width="1200" height="675" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/hitesh-choudhary-D9Zow2REm8U-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/06/hitesh-choudhary-D9Zow2REm8U-unsplash-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/06/hitesh-choudhary-D9Zow2REm8U-unsplash-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/06/hitesh-choudhary-D9Zow2REm8U-unsplash-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/06/hitesh-choudhary-D9Zow2REm8U-unsplash-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>次にプログラミング言語の1つである<span style="background-color: #ffff99;"><strong>Python</strong></span>についてご紹介します。</p>
<p>&nbsp;</p>
<p>スクレイピングを行う際には、プログラムを書く必要があります。</p>
<p>実際にはOctparseなどのサービスを使えば、ノーコードでもスクレイピングができてしまうのですが、より自分専用に自由に設計したい場合はプログラミングのスキルが必要になってきます。</p>
<p>&nbsp;</p>
<p>プログラミング言語はたくさんありますが、スクレイピングをするにあたってダントツでおすすめなのがPythonです。</p>
<p>&nbsp;</p>
<h3>Pythonとは？</h3>
<p>Pythonは<strong>プログラミング言語の1つ</strong>です。</p>
<p>他のプログラミング言語に比べて、読みやすく、短くて簡潔なコードを書くことが可能な言語で、<span style="background-color: #ffff99;"><strong>プログラミング初心者でも比較的学びやすい言語</strong></span>とされています。</p>
<p>&nbsp;</p>
<p>Pythonはスクレイピングの他にも、データ分析やAI、ウェブ開発など、さまざまな用途に活用できます。</p>
<p>スクレイピングによるデータの収集、分析、可視化、さらにはAIの実装など、あらゆる用途に対応できることから、Pythonの需要は世界中で高まりつつあります。</p>
			<a href="https://myfrankblog.com/what-you-can-do-with-python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="801" src="https://myfrankblog.com/wp-content/uploads/2020/06/python-book-1181671.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2020/06/python-book-1181671.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2020/06/python-book-1181671-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2020/06/python-book-1181671-1024x683.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2020/06/python-book-1181671-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか？できることまとめます【転職でも有利です】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>Pythonがスクレイピングに適している理由</h3>
<p>次に<span style="background-color: #ffff99;"><strong>Pythonがスクレイピングに適している理由</strong></span>をご紹介します。</p>
<p>以下の通りです。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>Pythonがスクレイピングに適している理由</p><div class="st-in-mybox">
<ol>
<li><strong>シンプルさ</strong>: Pythonはシンプルで直感的な構文を持っているため、初心者でも学びやすいのが特徴です。その結果、スクレイピングの初歩を習得する際の学習曲線が緩やかになります。</li>
<li><strong>強力なライブラリ</strong>: PythonはBeautifulSoup, Scrapyなどのスクレイピングに特化したライブラリが豊富に用意されています。これらのライブラリを活用すれば、短いコードでスクレイピングを実装することができます。</li>
<li><strong>コミュニティ</strong>: Pythonのコミュニティは大きいです。わからないことがあってもGoogleなどで検索すればすぐに答えが見つけられるのもメリットの1つです。</li>
</ol>
</div></div>
<p>&nbsp;</p>
<p>1番の理由は、<span style="background-color: #ffff99;"><strong>スクレイピングに特化したライブラリが豊富なこと</strong></span>にあると思います。</p>
<p>BeautifulSoupやScrapyなどのライブラリを活用すると、短いコードでHTMLを簡単に解析することができ、任意の情報を自由に抽出することができるようになります。</p>
<p>&nbsp;</p>
<h3><strong>Pythonの学習</strong></h3>
<p>Pythonは数あるプログラミング言語の中でも比較的学びやすいと言われています。</p>
<p>構造がシンプルで、比較的短いコードで複雑な処理にも対応できるのが魅力です。</p>
<p>&nbsp;</p>
<p>Pythonでスクレイピングを実装するためには、<strong>Pythonの最低限の知識と、スクレイピングに必要なPythonライブラリの理解が必要</strong>です。</p>
<p>さらには<strong>HTMLやCSSの構造</strong>についても理解しておくと、スクレイピングがスムーズに実装できるようになります。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>スクレイピングを実装するために必要な知識</p><div class="st-in-mybox">
<ul>
<li>Pythonの基礎的な知識（文法など）</li>
<li>スクレイピングに必要なライブラリの理解（requests, Beautifulsoup, scrapy, seleniumなど）</li>
<li>HTMLやCSSの理解（読んで理解できればOK）</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>これらの知識を学ぶにはいろいろな方法があります。</p>
<p>プログラミングスクールを活用するのもありですし、<a href="https://click.linksynergy.com/fs-bin/click?id=33F21TiMv24&amp;offerid=1138543.22&amp;type=3&amp;subid=0">Udemy</a>などの動画学習サイトを利用するのもありです。</p>
			<a href="https://myfrankblog.com/best_way_to_learn_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【これから学ぶ方へ】Pythonのおすすめ勉強法をまとめます！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
			<a href="https://myfrankblog.com/recommend_udemy_to_learn_programming/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2020/04/recommend_udemy_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="プログラミングの独学にUdemyをおすすめする理由！【僕はUdemyでPythonを独学しました！】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2020/04/recommend_udemy_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2020/04/recommend_udemy_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2020/04/recommend_udemy_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2020/04/recommend_udemy_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2020/04/recommend_udemy_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">プログラミングの独学にUdemyをおすすめする理由！【僕はPythonを独学しました】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>Pythonでスクレイピングを実行する</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15438" src="https://myfrankblog.com/wp-content/uploads/2023/06/chris-ried-ieic5Tq8YMk-unsplash.jpg" alt="Pythonでスクレイピングを実行する" width="1200" height="801" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/chris-ried-ieic5Tq8YMk-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/06/chris-ried-ieic5Tq8YMk-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/06/chris-ried-ieic5Tq8YMk-unsplash-1024x684.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/06/chris-ried-ieic5Tq8YMk-unsplash-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/06/chris-ried-ieic5Tq8YMk-unsplash-768x513.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>次に<span style="background-color: #ffff99;"><strong>Pythonを使用してスクレイピングを実行するまでの流れ</strong></span>についてご紹介していきます。</p>
<p>&nbsp;</p>
<h3>Pythonを使用したスクレイピングの流れ</h3>
<p>まずは全体の流れを確認しましょう。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>Pythonでスクレイピングを行うまでの流れ</p><div class="st-in-mybox">
<ol>
<li><strong>ライブラリのインポート</strong>: 最初に、スクレイピングに必要なライブラリ（requestsやBeautifulSoup等）をインポートします。</li>
<li><strong>ウェブページのダウンロード</strong>: requests.get()関数を使用して、指定されたURLのHTMLをダウンロードします。</li>
<li><strong>HTMLの解析</strong>: BeautifulSoupオブジェクトを作成してHTMLを解析し、データ抽出の準備をします。</li>
<li><strong>データの抽出</strong>: BeautifulSoupのメソッド（find(), find_all(), など）を使用して必要なデータを抽出します。</li>
<li><strong>データの保存</strong>: 最後に、抽出したデータをファイル（CSVやテキストファイルなど）に保存します。</li>
</ol>
</div></div>
<p>&nbsp;</p>
<h3>簡単なスクレイピングを実行してみる</h3>
<p><strong>実際に簡単なスクレイピングを実行してみましょう。</strong></p>
<p>実際のコードを見ると、かなり短いコードでスクレイピングが実装できるということが実感いただけると思います。</p>
<p>&nbsp;</p>
<p>ここでは簡単な例として本サイト「<strong>気ままなブログ</strong>」のトップページをスクレイピングして、サイトのタイトルを取得してみることにしましょう。</p>
<p>&nbsp;</p>
<h4>必要なライブラリのインストール</h4>
<p>まずは<span style="background-color: #ffff99;"><strong>ライブラリのインストール</strong></span>です。</p>
<p>Pythonでスクレイピングを行うためには、requestsとbeautifulsoup4(bs4)という2つのライブラリが必要です。</p>
<p>次のコマンドでこれらのライブラリをインストールするには以下のコマンドを使用します。</p>
<p>Pythonはすでにインストールされている前提です。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">pip install requests
pip install bs4
</pre>
<p>&nbsp;</p>
<p>これで必要ライブラリをインストールすることができます。</p>
<p>&nbsp;</p>
<h4>ウェブページからのHTMLの取得</h4>
<p>次に<span style="background-color: #ffff99;"><strong>ウェブページからHTMLを取得</strong></span>します。</p>
<p>今回の対象とするサイトは本サイト「<strong>気ままなブログ</strong>」です。</p>
<p>&nbsp;</p>
<p>HTMLを取得するためには以下のコードで実行できます。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from bs4 import BeautifulSoup
import requests

# urlを定義
url = "https://myfrankblog.com"

# htmlの取得
r = requests.get(url)</pre>
<p>&nbsp;</p>
<p>これで指定したURLのHTMLを取得できます。</p>
<p>requests.get(url)は指定したURLからHTTPリクエストを送り、サーバーからのレスポンスを受け取ることができます</p>
<p>&nbsp;</p>
<h4>HTMLの解析</h4>
<p>次に、<span style="background-color: #ffff99;"><strong>取得したHTMLを解析</strong></span>します。</p>
<p>HTMLの解析にはbs4のBeautifulSoupを使います。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># htmlを解析
soup = BeautifulSoup(r.content, "html.parser")</pre>
<p>&nbsp;</p>
<p>これでBeautifulSoupクラスのインスタンスが作成されて、さまざまなデータにアクセスすることができるようになります。</p>
<p>&nbsp;</p>
<h4>データの抽出</h4>
<p>解析したHTMLから<span style="background-color: #ffff99;"><strong>データを抽出</strong></span>します。</p>
<p>ここでは例としてサイトのタイトルを取得してみます。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># タイトルを取得
title = soup.find("title").getText()

# 表示
print(title)</pre>
<p>&nbsp;</p>
<p>確認すると、サイトのタイトルがきちんと取得されていることがわかります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15425" src="https://myfrankblog.com/wp-content/uploads/2023/06/6d926f154b170c21e057cb93b90ae313.png" alt="" width="444" height="135" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/6d926f154b170c21e057cb93b90ae313.png 444w, https://myfrankblog.com/wp-content/uploads/2023/06/6d926f154b170c21e057cb93b90ae313-300x91.png 300w, https://myfrankblog.com/wp-content/uploads/2023/06/6d926f154b170c21e057cb93b90ae313-150x46.png 150w" sizes="(max-width: 444px) 100vw, 444px" /></p>
<p>&nbsp;</p>
<p>簡単ですよね。</p>
<p>こんな感じで、BeautifulSoupを使うといろいろなデータを抽出することができます。</p>
<p>&nbsp;</p>
<h4>データの保存</h4>
<p>最後に、<span style="background-color: #ffff99;"><strong>抽出したデータを保存</strong></span>します。</p>
<p>&nbsp;</p>
<p>Pythonのライブラリには、データをファイルに保存するための便利な関数が多数含まれています。</p>
<p>ExcelやCSV形式で保存したり、バイナリデータをとして保存したり、テキストファイルとして保存したり、いろいろな方法でデータを保存することができます。</p>
<p>ここでは例としてテキストファイルに保存してみます。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># テキストファイルに保存する
with open('title.txt', 'w') as f:
    f.write(title)</pre>
<p>&nbsp;</p>
<p>きちんとファイルに保存されていることが確認できます。</p>
<p><img decoding="async" class="alignnone wp-image-15426" src="https://myfrankblog.com/wp-content/uploads/2023/06/61de1a9965bb45d15f5749288232e39c.png" alt="" width="511" height="158" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/61de1a9965bb45d15f5749288232e39c.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/06/61de1a9965bb45d15f5749288232e39c-300x93.png 300w, https://myfrankblog.com/wp-content/uploads/2023/06/61de1a9965bb45d15f5749288232e39c-1024x317.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/06/61de1a9965bb45d15f5749288232e39c-150x46.png 150w, https://myfrankblog.com/wp-content/uploads/2023/06/61de1a9965bb45d15f5749288232e39c-768x237.png 768w" sizes="(max-width: 511px) 100vw, 511px" /></p>
<p>&nbsp;</p>
<p>これはかなり簡単な例ですが、このような感じで、<span style="background-color: #ffff99;"><strong>比較的に少ないコートで簡単にスクレイピングを実装することができるのがPythonの特徴</strong></span>です。</p>
<p><span style="background-color: #ffff99;"><strong>基本的には、必要なライブラリが揃っているので、それらを組み合わせることにより、より複雑なデータも取得することができます。</strong></span></p>
<p>&nbsp;</p>
<h3>スクレイピングの具体例</h3>
<p><span style="background-color: #ffff99;"><strong>スクレイピングを使った具体例</strong></span>を本ブログで紹介している記事から紹介します。</p>
<p>&nbsp;</p>
<p>岸田首相の「検討」の発言回数を集計したり、SUUMOのデータを収集して最適な賃貸物件を探したり、価格.comのデータから中古車データを収集して分析したり、いろいろなことをしています。</p>
			<a href="https://myfrankblog.com/count_kento_by_prime_minister_kishida/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="800" src="https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="国会の議事録データを収集して岸田首相の「検討」の発言回数を集計してみた【Python】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-1024x683.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">国会の議事録データを収集して岸田首相の「検討」の発言回数を集計してみた【Python】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
			<a href="https://myfrankblog.com/python_data_analysis_for_real_states/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="797" src="https://myfrankblog.com/wp-content/uploads/2020/03/apartments-1845884_1280.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2020/03/apartments-1845884_1280.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2020/03/apartments-1845884_1280-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2020/03/apartments-1845884_1280-1024x680.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2020/03/apartments-1845884_1280-768x510.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonで不動産データ分析！】SUUMOをスクレイピングして情報収集！理想の賃貸物件を探してみた！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
			<a href="https://myfrankblog.com/how_to_scrape_used_car_data/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="801" src="https://myfrankblog.com/wp-content/uploads/2021/03/chandler-cruttenden-CUJjR4J_BlM-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="【Pythonコード解説】価格.comをスクレイピングして中古車データを収集する" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/03/chandler-cruttenden-CUJjR4J_BlM-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2021/03/chandler-cruttenden-CUJjR4J_BlM-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2021/03/chandler-cruttenden-CUJjR4J_BlM-unsplash-1024x683.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2021/03/chandler-cruttenden-CUJjR4J_BlM-unsplash-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2021/03/chandler-cruttenden-CUJjR4J_BlM-unsplash-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonコード解説】価格.comをスクレイピングして中古車データを収集する</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<p>これらはただの一例に過ぎないので、詳しくは本サイトで「<a href="https://myfrankblog.com/?s=スクレイピング">スクレイピング</a>」と検索してみてください。</p>
<p>結構ふざけた分析記事もたくさんありますw</p>
<p>&nbsp;</p>
<h2>応用的なスクレイピングテクニック</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15437" src="https://myfrankblog.com/wp-content/uploads/2023/06/artificial-intelligence-gb788e4356_1280.jpg" alt="応用的なスクレイピングテクニック" width="1200" height="800" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/artificial-intelligence-gb788e4356_1280.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/06/artificial-intelligence-gb788e4356_1280-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/06/artificial-intelligence-gb788e4356_1280-1024x683.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/06/artificial-intelligence-gb788e4356_1280-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/06/artificial-intelligence-gb788e4356_1280-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>スクレイピングの基本を身につけたら、より<span style="background-color: #ffff99;"><strong>応用的なテクニック</strong></span>にも挑戦してみましょう。</p>
<p>Pythonなら動的なウェブページのスクレイピング、ページネーションなど、複雑なサイトにも対応することも可能です。</p>
<p>&nbsp;</p>
<h3>動的なウェブページのスクレイピング</h3>
<p>現代のウェブサイトの多くは<span style="background-color: #ffff99;"><strong>JavaScriptを使用して動的にコンテンツを生成しています。</strong></span></p>
<p>&nbsp;</p>
<p>そのため、Pythonのrequestsライブラリだけでは取得できない情報が存在します。</p>
<p>このような場合は<span style="background-color: #ffff99;"><strong>Selenium</strong></span>などといったウェブブラウザを自動操作できるツールを活用すれば解決できます。</p>
<p>&nbsp;</p>
<p>本サイトでも、Seleniumを使ったスクレイピングを紹介しています。</p>
			<a href="https://myfrankblog.com/automating_ohagya_process/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="795" src="https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-300x199.jpg 300w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-1024x678.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-150x99.jpg 150w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-768x509.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonでデータ分析】株クラで目にする「おはぎゃー」のプロセスを自動化してみた！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>ページネーション</h3>
<p>多くのウェブサイトは大量の情報を持っていて、一つのページに全ての情報を表示することはできません。</p>
<p>そこで情報は複数の<strong>ページ（ページネーション）</strong>に分けて表示されます。</p>
<p>&nbsp;</p>
<p>ページネーションを持つウェブサイトから情報を抽出する場合、各ページのURLを順にスクレイピングするか、あるいはSeleniumのようなツールを使って「次へ」ボタンを自動的にクリックすることで全てのページから情報を取得します。</p>
			<a href="https://myfrankblog.com/scraping_national_diet_minutes/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="615" src="https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-300x154.jpg 300w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-1024x525.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-150x77.jpg 150w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-768x394.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonコード解説】Seleniumで国会会議録検索システムをスクレイピングしてみる</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>ログイン処理</h3>
<p>Seleniumを使えば、サイトへの<strong>ログイン処理</strong>も実装可能です。</p>
<p>&nbsp;</p>
<p>ログインして情報を取得したり、SNSで自動いいねとつけたりといろいろな用途に活用できます。</p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
			<a href="https://myfrankblog.com/instagram_auto_favorite_with_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
									<div class="st-cardbox-label"><span style="" class="st-cardbox-label-text">関連記事</span></div>
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="800" src="https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="【Pythonコード解説】SeleniumでInstagramの自動いいね！をしてみる" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-1024x682.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonコード解説】SeleniumでInstagramの自動いいね！をしてみる</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>結論：Pythonを学習してスクレイピングを活用しよう！</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15440" src="https://myfrankblog.com/wp-content/uploads/2023/06/businessman-g46620fb41_1280.jpg" alt="結論：Pythonを学習してスクレイピングを活用しよう！" width="1200" height="802" srcset="https://myfrankblog.com/wp-content/uploads/2023/06/businessman-g46620fb41_1280.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/06/businessman-g46620fb41_1280-300x201.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/06/businessman-g46620fb41_1280-1024x684.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/06/businessman-g46620fb41_1280-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/06/businessman-g46620fb41_1280-768x513.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>スクレイピングを利用すると、<strong>ウェブから大量の情報を効率的に収集する</strong>ことができます。</p>
<p>&nbsp;</p>
<p>これにより、普段の作業を効率化したり、収集したデータを分析してビジネスに活用したり、いろいろな場面で利用することができます。</p>
<p>スクレイピングが活躍できる場面は結構あるので、スキルとして持っておくと結構重宝されます。</p>
<p>&nbsp;</p>
<p>スクレイピングを行うには<strong>Pythonの基礎的な知識</strong>と、<strong>スクレイピングに必要なライブラリ（requestsやBeautifulSoupなど）の知識</strong>が必要です。</p>
<p>Pythonは、スクレイピング以外にもデータ分析やデータの可視化、AIの実装やウェブサイト開発など、さまざまな用途に利用できることから<strong>需要が増加しています。</strong></p>
<p>他のプログラミング言語に比べて<strong>比較的学びやすい</strong>ことも特徴の1つです。</p>
<p>&nbsp;</p>
<p>もし本記事を読んで、スクレイピングやPythonに興味が出たら是非ともチャレンジしてみてください。</p>
<p>本記事がみなさんの参考になれば幸いです。</p>
<p>&nbsp;</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p>&nbsp;</p>The post <a href="https://myfrankblog.com/complete_guide_for_scraping/">スクレイピングとは？Pythonでデータ収集の可能性を無限大に広げるための究極ガイド</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【まとめ】PythonとSeleniumでSBI証券を操作して自動売買システムを構築する！</title>
		<link>https://myfrankblog.com/build_trading_sytem_with_python_and_sbi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=build_trading_sytem_with_python_and_sbi</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 03 Jun 2023 09:00:25 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[Pythonで株式投資]]></category>
		<category><![CDATA[Pythonコード解説]]></category>
		<category><![CDATA[SBI証券]]></category>
		<category><![CDATA[日本株]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15310</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「【まとめ】PythonとSeleniumでSBI証券を操作して自動売買システムを構築する！」です。 &#160; こちらはまとめ記事になります。 これまで書い ...</p>
The post <a href="https://myfrankblog.com/build_trading_sytem_with_python_and_sbi/">【まとめ】PythonとSeleniumでSBI証券を操作して自動売買システムを構築する！</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>【まとめ】PythonとSeleniumでSBI証券を操作して自動売買システムを構築する！</strong></span>」です。</p>
<p>&nbsp;</p>
<p>こちらはまとめ記事になります。</p>
<p>これまで書いてきた<strong>SeleniumとPythonを使ってSBI証券を操作する方法に関する記事</strong>をまとめます。</p>
<p>関連記事が増えるたびに随時更新していくつもりです。</p>
<p>&nbsp;</p>
<p>結論、<strong>SeleniumとPythonを使えばSBI証券で自動売買システムを構築することが可能</strong>です。</p>
<p>自動ログイン、銘柄の売買、取引のキャンセル、約定履歴の収集など、さまざまなことができます。</p>

<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>
<h2>必要なセットアップ</h2>
<p><span style="background-color: #ffff99;"><strong>自動売買システムを構築するために必要なセットアップ</strong></span>は以下のとおりです。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>必要なセットアップ</p><div class="st-in-mybox">
<ul>
<li>Pythonのインストール</li>
<li>必要なライブラリのインストール</li>
<li>SeleniumのChromedriverのダウンロード</li>
<li>SBI証券の口座</li>
</ul>
</div></div>
<p>&nbsp;</p>
<h3>PythonとSeleniumの準備</h3>
<p><span style="background-color: #ffff99;"><strong>Seleniumのセットアップ方法</strong></span>については<a href="https://myfrankblog.com/how_to_setup_selenium_with_python/">こちらの記事</a>をご参照ください。</p>
<p><strong>Pythonのインストール方法</strong>や<strong>ライブラリのインストール方法</strong>についても合わせて解説しています。</p>
			<a href="https://myfrankblog.com/how_to_setup_selenium_with_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/05/setup_selenium_with_python_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/setup_selenium_with_python_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/05/setup_selenium_with_python_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/05/setup_selenium_with_python_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/05/setup_selenium_with_python_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/05/setup_selenium_with_python_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>SBI証券の口座開設</h3>
<p>SBI証券を利用して売買するので、<span style="background-color: #ffff99;"><strong>口座開設</strong></span>が必要です。</p>
<p>ネット申し込みできるので便利です。</p>
<p>&nbsp;</p>
<p class=" st-mybtn st-reflection st-btn-default" style="background:#e53935; background: linear-gradient(to bottom, #f44336, #e53935);border-color:#e57373;border-width:1px;border-radius:5px;font-weight:bold;color:#fff;box-shadow:0 3px 0 #c62828;"><a style="font-weight:bold;color:#fff;" href="https://t.felmat.net/fmcl?ak=Y42698.1.N784825.R840239" rel="noopener" target="_blank">SBI証券をみる<i class="fa fa-after fa-angle-right st-css-no" aria-hidden="true"></i></a></p>
<p style="text-align: center;"><a href="https://t.felmat.net/fmcl?ak=Y42698.1.378488L.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" src="https://t.felmat.net/fmimg/Y42698.378488L.R840239" alt="" width="300" height="250" border="0" /></a></p>
<p>&nbsp;</p>
<h2>自動売買システムの構築</h2>
<p>それではここから自動売買システムを構築するために必要な機能をまとめていきます。</p>
<p>これらを組み合わせることで自動売買システムを構築することができます。</p>
<p>&nbsp;</p>
<h3>SBI証券のサイトへの自動ログイン</h3>
<p>まず最初に必要なことは<span style="background-color: #ffff99;"><strong>SBI証券のサイトにログインする</strong></span>ことです。</p>
<p>ログインすると、個別銘柄の売買や約定履歴の取得など、さまざまな機能を実行したり、情報を取得することができるようになります。</p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>日本株の売買注文を出す/キャンセルする</h3>
<p>次に<span style="background-color: #ffff99;"><strong>売買注文</strong></span>です。</p>
<p>新規で発注することも、発注中の取引をキャンセルすることもできます。</p>
<p>指値や逆指値などといった複雑な注文にも対応しています。</p>
			<a href="https://myfrankblog.com/order_by_sbi_with_python_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券から日本株を売買する方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券から日本株を売買する方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
			<a href="https://myfrankblog.com/cancel_order_by_sbi_with_python_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_cancel_order_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_cancel_order_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_cancel_order_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_cancel_order_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_cancel_order_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_cancel_order_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>日本株のポートフォリオを取得する</h3>
<p><span style="background-color: #ffff99;"><strong>現在</strong><strong>保有している銘柄を取得する</strong></span>ことも可能です。</p>
<p>パフォーマンスを確認して利確や損切りの判断などに利用できます。</p>
			<a href="https://myfrankblog.com/collect_portfolio_from_sbi_with_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_thumnaul.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_thumnaul.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_thumnaul-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_thumnaul-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_thumnaul-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_thumnaul-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>買付余力、信用建余力を取得する</h3>
<p><span style="background-color: #ffff99;"><strong>買付余力</strong></span>や<span style="background-color: #ffff99;"><strong>信用建余力</strong></span>を取得すれば、新規でエントリーする際などに残預金を確認することができます。</p>
			<a href="https://myfrankblog.com/get_buying_power_by_sbi_with_python_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/05/1249f2682be7181f6a6266c99ee5cae6.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/1249f2682be7181f6a6266c99ee5cae6.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/05/1249f2682be7181f6a6266c99ee5cae6-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/05/1249f2682be7181f6a6266c99ee5cae6-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/05/1249f2682be7181f6a6266c99ee5cae6-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/05/1249f2682be7181f6a6266c99ee5cae6-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>約定履歴を取得する</h3>
<p><span style="background-color: #ffff99;"><strong>約定履歴</strong></span>を取得することで、いつ売買を行なったかを管理できたり、チャート上に売買記録をプロットして確認したりすることができるようになります。</p>
			<a href="https://myfrankblog.com/get_execution_history_by_sbi_with_python_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/execution_history_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/execution_history_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/execution_history_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/execution_history_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/execution_history_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/execution_history_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券から日本株の約定履歴を収集する方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>損益履歴を取得する</h3>
<p><span style="background-color: #ffff99;"><strong>損益履歴</strong></span>を取得すると、勝率や平均利益率/損失率などの情報を計算することができます。</p>
<p>月ごとにまとめて成績を時系列に可視化することなども可能です。</p>
			<a href="https://myfrankblog.com/get_profit_loss_history_by_sbi_with_python_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>
<h2>Pythonを使えば自動売買も作れる！</h2>
<p>ここまで紹介した記事のコードを活用すれば、Pythonで自動売買のシステムを構築することができます。</p>
<p>&nbsp;</p>
<p><span style="background-color: #ffff99;"><strong>Pythonは</strong><strong><span style="background-color: #ffff99;">AIや</span>データ分析に強い</strong><strong>プログラミング言語</strong></span>であり、世界中で需要が増加しています。</p>
<p>そのほかにもWebサイト開発や自然言語処理、プロセスオートメーションやスクレイピングなど、様々な用途に活用することができます。</p>
<p>本記事で紹介した自動売買システムの構築も用途の1つです。</p>
<p>&nbsp;</p>
<p>スキルとして身につけておくとキャリアにも有利に働きます。</p>
<p>プログラミング言語の中では比較的学びやすく、僕自身も社会人になってから独学でPythonを習得しました。</p>
<p>&nbsp;</p>
<p>もしPythonに興味があれば是非ともトライしてみてください。</p>
			<a href="https://myfrankblog.com/best_way_to_learn_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2021/05/8aa09ea6d7822fbb10331635d428d488-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【これから学ぶ方へ】Pythonのおすすめ勉強法をまとめます！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>本記事では「<span style="background-color: #ffff99;"><strong>PythonとSeleniumでSBI証券を操作して自動売買システムを構築する！</strong></span>」というテーマで、これまでの記事をまとめました。</p>
<p>&nbsp;</p>
<p>Pythonを使えばWebブラウザを操作して自動売買システムを構築することが可能です。</p>
<p>もしご興味があれば是非とも作ってみてください。</p>
<p>そして一緒に億り人を目指しましょう！</p>
<p>&nbsp;</p>
<p>ここまで読んでくださり、ありがとうございました。</p>
<p>&nbsp;</p>The post <a href="https://myfrankblog.com/build_trading_sytem_with_python_and_sbi/">【まとめ】PythonとSeleniumでSBI証券を操作して自動売買システムを構築する！</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法【自動売買への道】</title>
		<link>https://myfrankblog.com/get_buying_power_by_sbi_with_python_selenium/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=get_buying_power_by_sbi_with_python_selenium</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 27 May 2023 09:00:44 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[Pythonで株式投資]]></category>
		<category><![CDATA[Pythonコード解説]]></category>
		<category><![CDATA[SBI証券]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15301</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法」です。 &#160; PythonとSeleniumを使って、SBI証券のサイ ...</p>
The post <a href="https://myfrankblog.com/get_buying_power_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法</strong></span>」です。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使って、<strong>SBI証券のサイトから日本株の買付余力を取得する操作を自動化</strong>してみます。</p>
<p>ついでに<strong>信用建余力</strong>もまとめて取得してみます。</p>
<p>新規でエントリーする際には、現状の保有株から計算される買付余力の確認が必要になります。</p>
<p>&nbsp;</p>
<p>本記事で紹介するコードを活用すれば、買付余力が取得できるようになるので、売買判断等に活用することができます。</p>

<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>
<h2>SBI証券へのログイン</h2>
<p>事前準備として、<strong>PythonとSeleniumでSBI証券にログインしておく</strong>必要があります。</p>
<p>Seleniumの準備やSBI証券へログインする方法については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説しています。</p>
<p>&nbsp;</p>
<p>ログインが完了したら、本記事で紹介するコードを実行することができます。</p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>日本株の買付余力を取得するまでの流れ</h2>
<p>次に<strong>PythonとSeleniumでSBI証券のサイトから日本株の買付余力を取得するまでの流れ</strong>について確認します。</p>
<p>ざっくりこんな感じかと思います。とてもシンプルです。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>日本株を売買するまでの流れ</p><div class="st-in-mybox">
<ol>
<li>（SeleniumでSBI証券にログイン）</li>
<li>「口座管理」ページへ遷移する</li>
<li>買付余力と信用建余力を取得する</li>
</ol>
</div></div>
<p>&nbsp;</p>
<p>1については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説している内容になるので、（）書きにしました。</p>
<p>本記事では1はスキップして、<strong>2〜3を実装する方法</strong>を解説していきます。</p>
<p>&nbsp;</p>
<h2>PythonとSeleniumでSBI証券サイトから日本株の買付余力の取得を実装する</h2>
<p>それでは2~3の流れを順番に解説していきます。</p>
<p>&nbsp;</p>
<h3>「口座管理」ページへ遷移する</h3>
<p>まずは<span style="background-color: #ffff99;"><strong>「口座管理」ページへ遷移</strong></span>します。</p>
<p>SBI証券にログインしてから、「口座管理」をクリックすればOKです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15136" src="https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5.png" alt="" width="1200" height="166" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-300x42.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-1024x142.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-150x21.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-768x106.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>Chromeの検証からHTMLソースを確認すると、title=&#8221;口座管理&#8221;となっていることが確認できます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15137" src="https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2.jpg" alt="" width="1200" height="357" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-300x89.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-1024x305.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-150x45.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-768x228.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>この情報を利用して、Seleniumで「口座管理」をクリックします。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 口座管理ページへ遷移
driver.find_element_by_css_selector("img[title=口座管理]").click()</pre>
<p>&nbsp;</p>
<p>これで口座管理ページへ遷移することができます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15138" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2.jpg" alt="" width="1200" height="587" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-300x147.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-1024x501.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-150x73.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-768x376.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>これで最初のステップ完了です。</p>
<p>&nbsp;</p>
<h3>買付余力と信用建余力を取得する</h3>
<p>次に<span style="background-color: #ffff99;"><strong>買付余力と信用建余力を取得</strong></span>します。</p>
<p>&nbsp;</p>
<p>先ほどのページにすでに情報がありますね。</p>
<p><img decoding="async" class="alignnone wp-image-15303" src="https://myfrankblog.com/wp-content/uploads/2023/05/e923e7e565fc1a0c43745d49a6d8f126.jpg" alt="" width="546" height="598" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/e923e7e565fc1a0c43745d49a6d8f126.jpg 716w, https://myfrankblog.com/wp-content/uploads/2023/05/e923e7e565fc1a0c43745d49a6d8f126-274x300.jpg 274w, https://myfrankblog.com/wp-content/uploads/2023/05/e923e7e565fc1a0c43745d49a6d8f126-137x150.jpg 137w" sizes="(max-width: 546px) 100vw, 546px" /></p>
<p>&nbsp;</p>
<p>信用建余力はそのまま同じ名前で記載されています。</p>
<p>買付余力は取引可能額となっています。少し下にいくと2営業日ごと3営業日後の買付余力も確認できます。</p>
<p>&nbsp;</p>
<p>これらの情報をPythonで取得していきます。</p>
<p>信用建余力や取引可能額が記載されている部分はテーブルになっており、td要素のなかにdivが入っています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15304" src="https://myfrankblog.com/wp-content/uploads/2023/05/5baccb6b682ac894847d3131bd7b8050.jpg" alt="" width="1200" height="342" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/5baccb6b682ac894847d3131bd7b8050.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/05/5baccb6b682ac894847d3131bd7b8050-300x86.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/05/5baccb6b682ac894847d3131bd7b8050-1024x292.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/05/5baccb6b682ac894847d3131bd7b8050-150x43.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/05/5baccb6b682ac894847d3131bd7b8050-768x219.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>これを利用すればPythonを使って情報を抽出することができます。</p>
<p>次のコードでは、信用建余力と買付余力、さらに2営業日後と3営業日後の買付余力を取得しています。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from bs4 import BeautifulSoup
import re

# htmlを取得
html = BeautifulSoup(driver.page_source, "html.parser")

# 信用建余力
div = html.find("div", text=re.compile("信用建余力"))
margin_buying_power = div.findNext("div").getText().strip()

# 買付余力
buying_power = div.findNext("tr").findAll("div")[-1].getText().strip()

# 買付余力(2営業日後)
div = html.find("div", text=re.compile("買付余力\\(2営業日後\\)"))
buying_power_d2 = div.findNext("div").getText().strip()

# 買付余力(3営業日後)
buying_power_d3 = div.findNext("tr").findAll("div")[-1].getText().strip()


</pre>
<p>これで買付余力と信用建余力を取得することができます。</p>
<p>僕の口座のデータ取得時の余力バレちゃいますが、こんな感じです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15305" src="https://myfrankblog.com/wp-content/uploads/2023/05/81d436a67621285e73d814157dfa4f8a.png" alt="" width="214" height="146" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/81d436a67621285e73d814157dfa4f8a.png 214w, https://myfrankblog.com/wp-content/uploads/2023/05/81d436a67621285e73d814157dfa4f8a-150x102.png 150w" sizes="(max-width: 214px) 100vw, 214px" /></p>
<p>&nbsp;</p>
<p>ちなみにこれらは文字列になっているので、数値として扱う際には変換が必要になります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15306" src="https://myfrankblog.com/wp-content/uploads/2023/05/4ba1db17c3e23d331fb31d62eaf44ed4.png" alt="" width="316" height="76" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/4ba1db17c3e23d331fb31d62eaf44ed4.png 316w, https://myfrankblog.com/wp-content/uploads/2023/05/4ba1db17c3e23d331fb31d62eaf44ed4-300x72.png 300w, https://myfrankblog.com/wp-content/uploads/2023/05/4ba1db17c3e23d331fb31d62eaf44ed4-150x36.png 150w" sizes="(max-width: 316px) 100vw, 316px" /></p>
<p>&nbsp;</p>
<p>これで必要なデータを取得することができました。</p>
<p>&nbsp;</p>
<h3>最後にコードをまとめてどうぞ！</h3>
<p>最後に、これまでのコードをまとめたものを共有します。</p>
<p>&nbsp;</p>
<p>データの読み込み時間を考慮して、driver.implicitly_wait(60)を加えました。</p>
<p>これは次の処理を行うにあたり、<span style="background-color: #ffff99;"><strong>対象となる要素が見つかるまで待機する</strong></span>という命令になります。</p>
<p>これがないとページが読み込まれる前に値を入力しようしたり次の処理を行おうとしてエラーが発生する場合があるので、処理に時間がかかる箇所に追加しておくとプログラムの安定感が増します。</p>
<p>&nbsp;</p>
<p>それではどうぞ！</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from bs4 import BeautifulSoup
import re

# 口座管理ページへ遷移 
driver.find_element_by_css_selector("img[title=口座管理]").click()
driver.implicitly_wait(60)

# htmlを取得
html = BeautifulSoup(driver.page_source, "html.parser")

# 信用建余力
div = html.find("div", text=re.compile("信用建余力"))
margin_buying_power = div.findNext("div").getText().strip()

# 買付余力
buying_power = div.findNext("tr").findAll("div")[-1].getText().strip()

# 買付余力(2営業日後)
div = html.find("div", text=re.compile("買付余力\\(2営業日後\\)"))
buying_power_d2 = div.findNext("div").getText().strip()

# 買付余力(3営業日後)
buying_power_d3 = div.findNext("tr").findAll("div")[-1].getText().strip()

</pre>
<p>&nbsp;</p>
<p>これで、PythonとSeleniumを使って、<strong>SBI証券のサイトから日本株の買付余力を取得することができるようになりました。</strong></p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>本記事では「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法</strong></span>」について解説しました。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使えば、買付余力を自動で取得することができます。</p>
<p>基本的にはブラウザ上で行う操作は全てSeleniumで置き換えることができます。</p>
<p>&nbsp;</p>
<p>買付余力を取得できれば、新規でエントリーする際の口座状況の把握に活用することができます。</p>
<p>少し現金を残して余裕を持って投資するような戦略を構築することも可能になりますね。</p>
<p>&nbsp;</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>The post <a href="https://myfrankblog.com/get_buying_power_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の買付余力を取得する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法【自動売買への道】</title>
		<link>https://myfrankblog.com/get_profit_loss_history_by_sbi_with_python_selenium/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=get_profit_loss_history_by_sbi_with_python_selenium</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 20 May 2023 09:00:27 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[Pythonで株式投資]]></category>
		<category><![CDATA[Pythonコード解説]]></category>
		<category><![CDATA[SBI証券]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15236</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法」です。 &#160; PythonとSeleniumを使って、SBI証券のサイ ...</p>
The post <a href="https://myfrankblog.com/get_profit_loss_history_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法</strong></span>」です。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使って、<strong>SBI証券のサイトから日本株の損益を収集する操作を自動化</strong>してみます。</p>
<p><a href="https://myfrankblog.com/get_execution_history_by_sbi_with_python_selenium/">過去の記事</a>では約定履歴を収集する方法について解説しました。</p>
<p>&nbsp;</p>
<p>今回の記事では損益の収集です。</p>
<p>このデータを集計すれば、月ごとの勝率や平均利益率、損切り回数などいろいろな分析に活用することができます。</p>

<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>
<h2>SBI証券へのログイン</h2>
<p>事前準備として、<strong>PythonとSeleniumでSBI証券にログインしておく</strong>必要があります。</p>
<p>Seleniumの準備やSBI証券へログインする方法については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説しています。</p>
<p>&nbsp;</p>
<p>ログインが完了したら、本記事で紹介するコードを実行することができます。</p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>日本株の損益履歴(譲渡益税)を収集するまでの流れ</h2>
<p>次に<strong>PythonとSeleniumでSBI証券のサイトから日本株の損益履歴を収集するまでの流れ</strong>について確認します。</p>
<p>ざっくりこんな感じかと思います。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>日本株を売買するまでの流れ</p><div class="st-in-mybox">
<ol>
<li>（SeleniumでSBI証券にログイン）</li>
<li>「口座管理」→「取引履歴」→「譲渡益税明細」ページへ遷移する</li>
<li>条件を選択する</li>
<li>「照会」ボタンをクリックする</li>
<li>結果を収集する</li>
</ol>
</div></div>
<p>&nbsp;</p>
<p>1については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説している内容になるので、（）書きにしました。</p>
<p>本記事では1はスキップして、<strong>2〜5を実装する方法</strong>を解説していきます。</p>
<p>&nbsp;</p>
<h2>PythonとSeleniumでSBI証券サイトから日本株の損益履歴収集を実装する</h2>
<p>それでは2~5の流れを順番に解説していきます。</p>
<p>&nbsp;</p>
<h3>「口座管理」→「取引履歴」→「譲渡益税明細」ページへ遷移する</h3>
<p>まずは<strong><span style="background-color: #ffff99;">譲渡益税のページに遷移</span></strong>します。</p>
<p>SBI証券にログインしてから、「口座管理」→「取引履歴」→ 「譲渡益税明細」とクリックすればOKです。</p>
<p>&nbsp;</p>
<p><img decoding="async" class="alignnone size-full wp-image-15238" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_1_2.jpg" alt="" width="1000" height="296" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_1_2.jpg 1000w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_1_2-300x89.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_1_2-150x44.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_1_2-768x227.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>&nbsp;</p>
<p>順番にHTMLの要素を確認してみます。</p>
<p>「口座管理」については<strong>title=&#8221;口座管理&#8221;</strong>となっています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15217" src="https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1.png" alt="" width="1438" height="512" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1.png 1438w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-300x107.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-1024x365.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-150x53.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-768x273.png 768w" sizes="(max-width: 1438px) 100vw, 1438px" /></p>
<p>&nbsp;</p>
<p>「取引履歴」については、titleやaltなどの要素はありませんが、<strong>aタグで文字列が&#8221;取引履歴&#8221;</strong>となっています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15216" src="https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057.png" alt="" width="1200" height="219" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-300x55.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-1024x187.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-150x27.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-768x140.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>最後に、「譲渡益税明細」です。こちらも<strong>aタグで文字列が&#8221;譲渡益税明細&#8221;</strong>となっています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15239" src="https://myfrankblog.com/wp-content/uploads/2023/03/b3fba1a4f6dd40af412a6992cf13131d.png" alt="" width="924" height="145" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/b3fba1a4f6dd40af412a6992cf13131d.png 924w, https://myfrankblog.com/wp-content/uploads/2023/03/b3fba1a4f6dd40af412a6992cf13131d-300x47.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/b3fba1a4f6dd40af412a6992cf13131d-150x24.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/b3fba1a4f6dd40af412a6992cf13131d-768x121.png 768w" sizes="(max-width: 924px) 100vw, 924px" /></p>
<p>&nbsp;</p>
<p>これらの要素を利用してSeleniumでページ遷移していきます。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 口座管理ページへ遷移
driver.find_element_by_css_selector("img[title=口座管理]").click()
driver.implicitly_wait(60)

# 取引履歴ページへ遷移
driver.find_element_by_link_text("取引履歴").click()
driver.implicitly_wait(60)

# 譲渡益税明細ページへ遷移
driver.find_element_by_link_text("譲渡益税明細").click()
driver.implicitly_wait(60)</pre>
<p>&nbsp;</p>
<p>データの読み込み時間を考慮して、driver.implicitly_wait(60)を加えました。</p>
<p>これは次の処理を行うにあたり、<span style="background-color: #ffff99;"><strong>対象となる要素が見つかるまで待機する</strong></span>という命令になります。</p>
<p>これがないとページが読み込まれる前に値を入力しようしたり次の処理を行おうとしてエラーが発生する場合があるので、処理に時間がかかる箇所に追加しておくとプログラムの安定感が増します。</p>
<p>&nbsp;</p>
<p>これで譲渡益税のページへ遷移することができます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15240" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_2.jpg" alt="" width="1196" height="563" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_2.jpg 1196w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_2-300x141.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_2-1024x482.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_2-150x71.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_2-768x362.jpg 768w" sizes="(max-width: 1196px) 100vw, 1196px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>条件を選択する</h3>
<p>次に条件の選択です。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15242" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_3.jpg" alt="" width="585" height="328" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_3.jpg 585w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_3-300x168.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_3-150x84.jpg 150w" sizes="(max-width: 585px) 100vw, 585px" /></p>
<p>&nbsp;</p>
<p>譲渡益税明細のページでは次の条件を指定することができます。</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>ポイント</p><div class="st-in-mybox">
<ul>
<li>受渡日</li>
<li>1ページあたりの表示件数</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>全てドロップダウンメニューになっていますね。</p>
<p>それぞれの要素をチェックすると、全てにnameが付与されていることが確認できます。</p>
<p>こちらは受渡日です。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15243" src="https://myfrankblog.com/wp-content/uploads/2023/03/7e96840b56f61536f0ce59ec3fef4ebd.png" alt="" width="1192" height="537" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/7e96840b56f61536f0ce59ec3fef4ebd.png 1192w, https://myfrankblog.com/wp-content/uploads/2023/03/7e96840b56f61536f0ce59ec3fef4ebd-300x135.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/7e96840b56f61536f0ce59ec3fef4ebd-1024x461.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/7e96840b56f61536f0ce59ec3fef4ebd-150x68.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/7e96840b56f61536f0ce59ec3fef4ebd-768x346.png 768w" sizes="(max-width: 1192px) 100vw, 1192px" /></p>
<p>&nbsp;</p>
<p>1ページあたりの表示件数についてもname=&#8221;max_cnt&#8221;となっています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15244" src="https://myfrankblog.com/wp-content/uploads/2023/03/4c299d1fdb34041c9c460cddc4eeb3d6.png" alt="" width="1204" height="145" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/4c299d1fdb34041c9c460cddc4eeb3d6.png 1204w, https://myfrankblog.com/wp-content/uploads/2023/03/4c299d1fdb34041c9c460cddc4eeb3d6-300x36.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/4c299d1fdb34041c9c460cddc4eeb3d6-1024x123.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/4c299d1fdb34041c9c460cddc4eeb3d6-150x18.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/4c299d1fdb34041c9c460cddc4eeb3d6-768x92.png 768w" sizes="(max-width: 1204px) 100vw, 1204px" /></p>
<p>&nbsp;</p>
<p>これらのnameを利用してドロップダウンの値を選択していきます。</p>
<p>やり方は全て同じですので、ここでは<strong>1ページあたりの表示件数</strong>を例にとって解説していきます。</p>
<p>Seleniumでドロップダウンメニューを選択するには、<strong>selenium.webdriver.support.select.Select</strong>を使います。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 表示件数
max_count_div = driver.find_element_by_name("max_cnt")
max_count_options = Select(max_count_div)

# 値の取得 ついでにintに変換
max_count_value_list = [int(c.get_attribute("value")) for c in max_count_options.options]</pre>
<p>&nbsp;</p>
<p>こんな感じでSelectを使います。対象の要素を取得してSelectに引き渡せばOKです。</p>
<p>ここから選択できる値を取得することもできます。文字列になっているのでついでにintに変換しました。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15245" src="https://myfrankblog.com/wp-content/uploads/2023/03/9ede4b6503c2e8ccb6bf6d7e686670be.png" alt="" width="185" height="64" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/9ede4b6503c2e8ccb6bf6d7e686670be.png 185w, https://myfrankblog.com/wp-content/uploads/2023/03/9ede4b6503c2e8ccb6bf6d7e686670be-150x52.png 150w" sizes="(max-width: 185px) 100vw, 185px" /></p>
<p>&nbsp;</p>
<p>値を選択する際には、値を直接指定することもできますし、indexで指定することもできます。</p>
<p>値を直接指定する場合は該当する値がない場合はエラーになってしまうのでindexで選択する方が無難です。</p>
<p>&nbsp;</p>
<p>先ほど作成したmax_count_value_listから任意の値を検索してそのindexを利用することもできます。</p>
<p>この場合intで指定できるので使い勝手が良くなります。</p>
<p>&nbsp;</p>
<p>次のコードでは全て100件を選択しています。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># indexで指定
max_count_options.select_by_index(1)

# 値で指定
max_count_options.select_by_value("100")

# max_count_value_listを利用してindexを指定
max_count_options.select_by_index(max_count_value_list.index(100))
</pre>
<p>&nbsp;</p>
<p>どれを使っても結果は変わらないのでお好きなものを選んでいただければOKです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15246" src="https://myfrankblog.com/wp-content/uploads/2023/03/9a1f7b704830efd7dc860eafa5ba3728.png" alt="" width="572" height="234" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/9a1f7b704830efd7dc860eafa5ba3728.png 572w, https://myfrankblog.com/wp-content/uploads/2023/03/9a1f7b704830efd7dc860eafa5ba3728-300x123.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/9a1f7b704830efd7dc860eafa5ba3728-150x61.png 150w" sizes="(max-width: 572px) 100vw, 572px" /></p>
<p>&nbsp;</p>
<p>受渡日についても同様のやり方で設定できます。</p>
<p>全ての項目を網羅したコードは最後に共有します。</p>
<p>&nbsp;</p>
<p>ここでは一旦次に進みます。</p>
<p>&nbsp;</p>
<h3>「照会」ボタンをクリックする</h3>
<p>条件の設定が完了したら<span style="background-color: #ffff99;"><strong>「照会」ボタンをクリック</strong></span>します。</p>
<p>&nbsp;</p>
<p>要素を確認すると、<strong>name=&#8221;ACT_search&#8221;</strong>となっているのでこれを利用します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15247" src="https://myfrankblog.com/wp-content/uploads/2023/03/abb8d067098a8441fb0b649e6a3338b7.png" alt="" width="1192" height="156" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/abb8d067098a8441fb0b649e6a3338b7.png 1192w, https://myfrankblog.com/wp-content/uploads/2023/03/abb8d067098a8441fb0b649e6a3338b7-300x39.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/abb8d067098a8441fb0b649e6a3338b7-1024x134.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/abb8d067098a8441fb0b649e6a3338b7-150x20.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/abb8d067098a8441fb0b649e6a3338b7-768x101.png 768w" sizes="(max-width: 1192px) 100vw, 1192px" /></p>
<p>&nbsp;</p>
<p>Seleniumで実装すると次のようになります。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 「照会」をクリック
driver.find_element_by_name("ACT_search").click()</pre>
<p>&nbsp;</p>
<p>これで譲渡益税明細が表示されます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15248" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_4.jpg" alt="" width="580" height="817" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_4.jpg 580w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_4-213x300.jpg 213w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_pl_history_4-106x150.jpg 106w" sizes="(max-width: 580px) 100vw, 580px" /></p>
<p>&nbsp;</p>
<p>僕の損益情報がダダ漏れですが、こんな感じで表示されていたらOKです。</p>
<p>&nbsp;</p>
<h3>結果を収集する</h3>
<p>最後に表示結果を収集します。</p>
<p>&nbsp;</p>
<h4>データの収集</h4>
<p>テーブル情報を取得して、各行のデータを収集していきます。</p>
<p>&nbsp;</p>
<p>今回の場合、海外株の情報も混じっています。</p>
<p>よって、一旦全て収集してから最終的に日本株のデータだけに絞っていきます。</p>
<p>&nbsp;</p>
<p>そしてこのプロセスを全て解説していくと長くなってしまうので、ここではコードをまとめて紹介します。</p>
<p>なるべく多くのコメントをつけました。</p>
<p>&nbsp;</p>
<p>さらに、データが多いと複数ページになります。</p>
<p>「次へ→」というボタンがあると次のページがあることを意味するので、これを利用して次ページがなくなるまで繰り返しデータを収集するようなプログラムにしました。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from bs4 import BeautifulSoup
import unicodedata
import re
import pandas as pd

# 各行のデータを格納する変数を定義
data = []

# 次ページが存在するかをチェックするための変数を定義
is_next_page_available = True

# is_next_page_availableがTrueである限り処理を繰り返す
while is_next_page_available:
    
    # htmlを取得
    html = BeautifulSoup(driver.page_source, "html.parser")
    
    # tableを取得
    table = html.find("td", text=re.compile("銘柄")).findParent("table")

    # 全てのtr要素をチェック　一行目はカラム名なのでスキップする
    for tr in table.findAll("tr"):
        
        # 背景色とカラムの連結で銘柄情報が含まれている行かどうかを判断する
        if tr.find("td").get("bgcolor") == "#ffffff" and tr.find("td").get("colspan") == "2":
            
            # 行データを格納するリストを定義
            row = []
            
            # 全てのセルデータを収集、不要な文字を排除して、unicodedataで正規化する
            for td in tr.findAll("td"):
                if td.getText().strip() != "":
                    text = td.getText().strip().replace(",", "").replace("+", "")
                    row.append(unicodedata.normalize("NFKC", text))

            # 全てのセルデータを収集、不要な文字を排除して、unicodedataで正規化する
            for td in tr.findNext("tr").findAll("td"):
                if td.getText().strip() != "":
                    text = td.getText().strip().replace(",", "").replace("+", "")
                    row.append(unicodedata.normalize("NFKC", text))
        
            # dataに追加
            data.append(row)
    
    # 次ページがあるかチェック　あればクリック、なければ終了
    if html.find("u", text=re.compile("次へ→")):
        driver.find_element_by_link_text("次へ→").click()
        driver.implicitly_wait(60)
    else:
        is_next_page_available = False
        
# カラム名を定義
columns = ["銘柄", "取引", "売却/決済金額(費用)", "取得/新規年月日", "取得/新規金額", "損益金額", "約定日", "数量", "受渡日"]

# DataFrameに変換
df = pd.DataFrame(data, columns=columns)</pre>
<p>&nbsp;</p>
<p>これでデータが収集できます。</p>
<p>また、今回は損益情報の取得が目的なので、税徴収額については収集していません。</p>
<p>&nbsp;</p>
<p>収集したデータがこちらです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15250" src="https://myfrankblog.com/wp-content/uploads/2023/03/62ffa16a4a34583287903f86bb624027.png" alt="" width="778" height="209" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/62ffa16a4a34583287903f86bb624027.png 778w, https://myfrankblog.com/wp-content/uploads/2023/03/62ffa16a4a34583287903f86bb624027-300x81.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/62ffa16a4a34583287903f86bb624027-150x40.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/62ffa16a4a34583287903f86bb624027-768x206.png 768w" sizes="(max-width: 778px) 100vw, 778px" /></p>
<p>&nbsp;</p>
<p>いい感じですよね。</p>
<p>&nbsp;</p>
<h4>データの整形</h4>
<p>次に修正したデータを少し<strong>整形</strong>していきます。</p>
<p>これは何をやるかによってどこまで綺麗に整形するべきかは変わってくると思うのですが、ここでは次のような作業をしました。</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>データ整形</p><div class="st-in-mybox">
<ul>
<li>全カラムに対して、&#8221;&#8211;&#8220;とNaNに変換</li>
<li>「銘柄」から証券コードを抽出 → 証券コードがある銘柄が日本株と判断して日本株データにもに絞る</li>
<li>「数量」をintに変換</li>
<li>「約定日」、「受渡日」をdatetimeに変換</li>
<li>「取得/新規金額」、「損益金額」をfloatに変換</li>
<li>「取引」から株式配当金を除外</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>これらを実装したコードがこちらです。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">import numpy as np
import datetime
import re

# "--"とNaNに変換
df.replace("--", np.nan, inplace=True)

# 証券コードを抽出
df["証券コード"] = df["銘柄"].apply(
    lambda x: re.findall(r"[0-9]{4}", x)[0] if len(re.findall(r"[0-9]{4}", x))&gt;0 else np.nan)

# 証券コードがあるデータのみ抽出
df = df.dropna(subset=["証券コード"]).reset_index(drop=True)

# 日付の型変換
df["約定日"] = df["約定日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))
df["受渡日"] = df["受渡日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))

# floatに変換
df["取得/新規金額"] = df["取得/新規金額"].apply(lambda x: float(x))
df["損益金額"] = df["損益金額"].apply(lambda x: float(x))

# intに変換
df["数量"] = df["数量"].apply(lambda x: int(x.replace("株", "")))

# 配当金を除外
df = df[df["取引"]!="株式配当金"]</pre>
<p>&nbsp;</p>
<p>これで結構データはきれいになります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15251" src="https://myfrankblog.com/wp-content/uploads/2023/03/28c512727ac6b9404eb4c00d5e23bd87.png" alt="" width="703" height="208" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/28c512727ac6b9404eb4c00d5e23bd87.png 703w, https://myfrankblog.com/wp-content/uploads/2023/03/28c512727ac6b9404eb4c00d5e23bd87-300x89.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/28c512727ac6b9404eb4c00d5e23bd87-150x44.png 150w" sizes="(max-width: 703px) 100vw, 703px" /></p>
<p>&nbsp;</p>
<p>これで全てのプロセスが完了です。</p>
<p>あとは必要に応じてカラムを追加したり集計したりすればいろいろな分析や用途に活用できるかと思います。</p>
<p>&nbsp;</p>
<h3>最後にコードをまとめてどうぞ！</h3>
<p>最後に、これまでのコードをまとめたものを共有します。</p>
<p>解説で割愛した部分も全て網羅しています。</p>
<p>&nbsp;</p>
<p>なるべくコメントも多くつけました。</p>
<p>コピペ用にどうぞ。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from selenium import webdriver 
from selenium.webdriver.support.select import Select
from bs4 import BeautifulSoup
import unicodedata
import re
import pandas as pd


"""
ページ遷移
"""
# 口座管理ページへ遷移
driver.find_element_by_css_selector("img[title=口座管理]").click()
driver.implicitly_wait(60)

# 取引履歴ページへ遷移
driver.find_element_by_link_text("取引履歴").click()
driver.implicitly_wait(60)

# 譲渡益税明細ページへ遷移
driver.find_element_by_link_text("譲渡益税明細").click()
driver.implicitly_wait(60)


"""
条件選択
"""
# from 年
from_year_div = driver.find_element_by_name("ref_from_yyyy")
from_year_options = Select(from_year_div)
from_year_value_list = [int(y.get_attribute("value")) for y in from_year_options.options]

# from 月
from_month_div = driver.find_element_by_name("ref_from_mm")
from_month_options = Select(from_month_div)
from_month_value_list = [int(m.get_attribute("value")) for m in from_month_options.options]

# from 日
from_day_div = driver.find_element_by_name("ref_from_dd")
from_day_options = Select(from_day_div)
from_day_value_list = [int(d.get_attribute("value")) for d in from_day_options.options]

# to 年
to_year_div = driver.find_element_by_name("ref_to_yyyy")
to_year_options = Select(to_year_div)
to_year_value_list = [int(y.get_attribute("value")) for y in to_year_options.options]

# to 月
to_month_div = driver.find_element_by_name("ref_to_mm")
to_month_options = Select(to_month_div)
to_month_value_list = [int(m.get_attribute("value")) for m in to_month_options.options]

# to 日
to_day_div = driver.find_element_by_name("ref_to_dd")
to_day_options = Select(to_day_div)
to_day_value_list = [int(d.get_attribute("value")) for d in to_day_options.options]

# 表示件数
max_count_div = driver.find_element_by_name("max_cnt")
max_count_options = Select(max_count_div)
max_count_value_list = [int(c.get_attribute("value")) for c in max_count_options.options]

# 受渡日を設定
from_year_options.select_by_index(from_year_value_list.index(2022))
from_month_options.select_by_index(from_month_value_list.index(1))
from_day_options.select_by_index(from_day_value_list.index(1))

to_year_options.select_by_index(to_year_value_list.index(2023))
to_month_options.select_by_index(to_month_value_list.index(3))
to_day_options.select_by_index(to_day_value_list.index(31))

# 表示件数を設定
max_count_options.select_by_index(max_count_value_list.index(100))

# 「照会」をクリック
driver.find_element_by_name("ACT_search").click()
driver.implicitly_wait(60)


"""
データ収集
"""
# 各行のデータを格納する変数を定義
data = []

# 次ページが存在するかをチェックするための変数を定義
is_next_page_available = True

# is_next_page_availableがTrueである限り処理を繰り返す
while is_next_page_available:
    
    # htmlを取得
    html = BeautifulSoup(driver.page_source, "html.parser")
    
    # tableを取得
    table = html.find("td", text=re.compile("銘柄")).findParent("table")

    # 全てのtr要素をチェック　一行目はカラム名なのでスキップする
    for tr in table.findAll("tr"):
        
        # 背景色とカラムの連結で銘柄情報が含まれている行かどうかを判断する
        if tr.find("td").get("bgcolor") == "#ffffff" and tr.find("td").get("colspan") == "2":
            
            # 行データを格納するリストを定義
            row = []
            
            # 全てのセルデータを収集、不要な文字を排除して、unicodedataで正規化する
            for td in tr.findAll("td"):
                if td.getText().strip() != "":
                    text = td.getText().strip().replace(",", "").replace("+", "")
                    row.append(unicodedata.normalize("NFKC", text))

            # 全てのセルデータを収集、不要な文字を排除して、unicodedataで正規化する
            for td in tr.findNext("tr").findAll("td"):
                if td.getText().strip() != "":
                    text = td.getText().strip().replace(",", "").replace("+", "")
                    row.append(unicodedata.normalize("NFKC", text))
        
            # dataに追加
            data.append(row)
    
    # 次ページがあるかチェック　あればクリック、なければ終了
    if html.find("u", text=re.compile("次へ→")):
        driver.find_element_by_link_text("次へ→").click()
        driver.implicitly_wait(60)
    else:
        is_next_page_available = False
        
# カラム名を定義
columns = ["銘柄", "取引", "売却/決済金額(費用)", "取得/新規年月日", "取得/新規金額", "損益金額", "約定日", "数量", "受渡日"]

# DataFrameに変換
df = pd.DataFrame(data, columns=columns)

"""
データ整形
"""
# "--"とNaNに変換
df.replace("--", np.nan, inplace=True)

# 証券コードを抽出
df["証券コード"] = df["銘柄"].apply(
    lambda x: re.findall(r"[0-9]{4}", x)[0] if len(re.findall(r"[0-9]{4}", x))&gt;0 else np.nan)

# 証券コードがあるデータのみ抽出
df = df.dropna(subset=["証券コード"]).reset_index(drop=True)

# 日付の型変換
df["約定日"] = df["約定日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))
df["受渡日"] = df["受渡日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))

# floatに変換
df["取得/新規金額"] = df["取得/新規金額"].apply(lambda x: float(x))
df["損益金額"] = df["損益金額"].apply(lambda x: float(x))

# intに変換
df["数量"] = df["数量"].apply(lambda x: int(x.replace("株", "")))

</pre>
<pre># 配当金を除外
df = df[df["取引"]!="株式配当金"]</pre>
<p>&nbsp;</p>
<p>これで、PythonとSeleniumを使って、<strong>SBI証券のサイトから日本株の損益履歴を収集することができるようになりました。</strong></p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>本記事では「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法</strong></span>」について解説しました。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使えば、損益履歴の収集を自動化することができました。</p>
<p>参照時の条件選択も全てSeleniumを通じて自由に操作することができます。</p>
<p>&nbsp;</p>
<p>このデータを集計すれば、月ごとの勝率や平均利益率、損切り回数のカウントなど、いろいろな分析に活用することができます。</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>The post <a href="https://myfrankblog.com/get_profit_loss_history_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！</title>
		<link>https://myfrankblog.com/how_to_setup_selenium_with_python/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how_to_setup_selenium_with_python</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 13 May 2023 09:00:59 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Pythonコード解説]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15337</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！」です。 &#160; 悩んでいる人 PythonでSeleniumを使って ...</p>
The post <a href="https://myfrankblog.com/how_to_setup_selenium_with_python/">PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！</strong></span>」です。</p>
<p>&nbsp;</p>
<div class="st-kaiwa-box kaiwaicon2 clearfix"><div class="st-kaiwa-face"><img src="https://myfrankblog.com/wp-content/uploads/2020/12/2.png" width="60px"><div class="st-kaiwa-face-name">悩んでいる人</div></div><div class="st-kaiwa-area"><div class="st-kaiwa-hukidashi"></p>
<p>PythonでSeleniumを使ってみたいけど、始め方がわからない。</p>
<p>使うまでの流れが知りたいです。。。</p>
<p></div></div></div>
<p>&nbsp;</p>
<p>上記に答えていきます。</p>
<p>Seleniumを使えば、ブラウザ上のあらゆる操作をプログラムを介して実行できるようになります。</p>
<p>ページ遷移はもちろん、文字の入力やドロップダウンメニューの選択、ボタンのクリックなど、さまざまなことができます。</p>
<p>基本、我々がウェブ上で行う作業は全てSeleniumでもできると思っていただいて問題ありません。</p>
<p>&nbsp;</p>
<p><strong>本記事では、Pythonを使ってSeleniumを使うまでの流れについて解説していきます。</strong></p>
<p><strong>これからSeleniumを使ってみたいという方は、ぜひ最後まで読んでみてください。</strong></p>

<p>&nbsp;</p>
<h2>PythonでSeleniumを使うまでの流れ</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15355" src="https://myfrankblog.com/wp-content/uploads/2023/05/clayton-robbins-7r7-7RLdwCU-unsplash.jpg" alt="" width="1200" height="733" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/clayton-robbins-7r7-7RLdwCU-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/05/clayton-robbins-7r7-7RLdwCU-unsplash-300x183.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/05/clayton-robbins-7r7-7RLdwCU-unsplash-1024x625.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/05/clayton-robbins-7r7-7RLdwCU-unsplash-150x92.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/05/clayton-robbins-7r7-7RLdwCU-unsplash-768x469.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>まずは<span style="background-color: #ffff99;"><strong>全体の流れ</strong></span>について確認しておきましょう。</p>
<p><strong>PythonでSeleniumを使うまでに必要な流れ</strong>は以下のとおりです。</p>
<p>ここではブラウザーとして<strong>Chrome</strong>を利用することを想定しています。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>PythonでSeleniumを使うまでの流れ</p><div class="st-in-mybox">
<ul>
<li>Pythonをインストールする（AnacondaでもOK）</li>
<li>pipでSeleniumをインストール</li>
<li>ChromeDriverをダウンロード（Versionに注意！）</li>
<li>ChromeDriverを任意の場所に保存する</li>
<li>PythonでSeleniumを立ち上げる</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>順番に詳しくみていきましょう。</p>
<p>&nbsp;</p>
<h3>Pythonをインストールする（AnacondaでもOK）</h3>
<p>まずは<span style="background-color: #ffff99;"><strong>Pythonをインストール</strong></span>します。</p>
<p>公式サイトからダウンロードしてもいいですし、Macを使ってる方は<a href="https://brew.sh/">Homebrew</a>を使ってもOKです。</p>
<p>&nbsp;</p>
<p><a href="https://www.python.org/">Python</a>でデータ分析やAI開発などをしたい方は<a href="https://www.anaconda.com/">Anaconda</a>をダウンロードするのも良いです。</p>
<p>必要な外部ライブラリが一緒にセットアップできるので効率的です。</p>
<p>&nbsp;</p>
<h3>pipでSeleniumをインストール</h3>
<p>次に必要な作業は<span style="background-color: #ffff99;"><strong>Seleniumのインストール</strong></span>です。</p>
<p>Seleniumは<strong>外部ライブラリ</strong>なので、追加でインストールする必要があります。</p>
<p>&nbsp;</p>
<p>また、AnacondaにもSeleniumは含まれていませんので、いずれの場合でもインストールが必要です。</p>
<p>pipコマンドで簡単にインストールができます。</p>
<pre class="lang:python decode:true">pip install selenium</pre>
<p>&nbsp;</p>
<p>特定のバージョンをインストールしたい場合は次のコマンドのようにバージョンを指定して実行します。</p>
<pre class="lang:python decode:true">pip install selenium==4.1.1</pre>
<p>&nbsp;</p>
<p>”Successfully Installed Selenium”みたいな内容が表示されたらOKです。</p>
<p>&nbsp;</p>
<h3>ChromeDriverをダウンロード（Versionに注意！）</h3>
<p>次の<span style="background-color: #ffff99;"><strong>ChromeDriverをダウンロード</strong></span>します。</p>
<p>&nbsp;</p>
<h4>まずは利用してるChromeのバージョンをチェック</h4>
<p>ここで注意点が1つあります。</p>
<p>それがChromeのバージョンです。</p>
<p><strong>現在利用しているChromeのバージョンとChromeDriverのバージョンがずれていると不具合が起きます。</strong></p>
<p>&nbsp;</p>
<p>ここを回避するためにまずは利用中のChromeのバージョンを確認します。</p>
<p>Chromeを立ち上げて、右上の点々から「ヘルプ」→「Google Chromeについて」をクリックします。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15342" src="https://myfrankblog.com/wp-content/uploads/2023/05/93f75cb542a7ebae1c81e949dc312825.png" alt="" width="809" height="656" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/93f75cb542a7ebae1c81e949dc312825.png 809w, https://myfrankblog.com/wp-content/uploads/2023/05/93f75cb542a7ebae1c81e949dc312825-300x243.png 300w, https://myfrankblog.com/wp-content/uploads/2023/05/93f75cb542a7ebae1c81e949dc312825-150x122.png 150w, https://myfrankblog.com/wp-content/uploads/2023/05/93f75cb542a7ebae1c81e949dc312825-768x623.png 768w" sizes="(max-width: 809px) 100vw, 809px" /></p>
<p>&nbsp;</p>
<p>遷移先のページに行くとChromeのバージョンを確認することができます。</p>
<p>僕の場合だと、バージョン113です。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15343" src="https://myfrankblog.com/wp-content/uploads/2023/05/7be5e8a85e1c448edaf53714183e17a1.png" alt="" width="750" height="392" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/7be5e8a85e1c448edaf53714183e17a1.png 750w, https://myfrankblog.com/wp-content/uploads/2023/05/7be5e8a85e1c448edaf53714183e17a1-300x157.png 300w, https://myfrankblog.com/wp-content/uploads/2023/05/7be5e8a85e1c448edaf53714183e17a1-150x78.png 150w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<p>&nbsp;</p>
<p>このバージョンの数字を覚えておけば、ひとまずここはOKです。</p>
<p>&nbsp;</p>
<h4>ChromeDriverをダウンロードする</h4>
<p>次に<span style="background-color: #ffff99;"><strong>ChromeDriverをダウンロード</strong></span>します。</p>
<p><a href="https://chromedriver.chromium.org/downloads">こちら</a>のページからダウンロードすることができます。</p>
<p>&nbsp;</p>
<p>ここで先ほど確認したバージョンに一致するものを探してダウンロードしてください。</p>
<p>基本的には最初の数字だけあってれば大丈夫と思います。</p>
<p>僕の場合だと113です。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15346" src="https://myfrankblog.com/wp-content/uploads/2023/05/c41631d7920c38bfef58991686d16755.png" alt="" width="773" height="790" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/c41631d7920c38bfef58991686d16755.png 773w, https://myfrankblog.com/wp-content/uploads/2023/05/c41631d7920c38bfef58991686d16755-294x300.png 294w, https://myfrankblog.com/wp-content/uploads/2023/05/c41631d7920c38bfef58991686d16755-147x150.png 147w, https://myfrankblog.com/wp-content/uploads/2023/05/c41631d7920c38bfef58991686d16755-768x785.png 768w" sizes="(max-width: 773px) 100vw, 773px" /></p>
<p>&nbsp;</p>
<p>クリックすると次のような画面に遷移します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15347" src="https://myfrankblog.com/wp-content/uploads/2023/05/1f8341b14ff803febd3a2d4ffd4a4290.png" alt="" width="872" height="313" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/1f8341b14ff803febd3a2d4ffd4a4290.png 872w, https://myfrankblog.com/wp-content/uploads/2023/05/1f8341b14ff803febd3a2d4ffd4a4290-300x108.png 300w, https://myfrankblog.com/wp-content/uploads/2023/05/1f8341b14ff803febd3a2d4ffd4a4290-150x54.png 150w, https://myfrankblog.com/wp-content/uploads/2023/05/1f8341b14ff803febd3a2d4ffd4a4290-768x276.png 768w" sizes="(max-width: 872px) 100vw, 872px" /></p>
<p>&nbsp;</p>
<p>ご自身のPCに合わせたものをクリックすればダウンロードが開始されます。</p>
<p>これでダウンロードはOKです。</p>
<p>&nbsp;</p>
<h3>ChromeDriverを任意の場所に保存する</h3>
<p>次に<span style="background-color: #ffff99;"><strong>ダウンロードしたChromeDriverを任意の場所に保存</strong></span>しましょう。</p>
<p>&nbsp;</p>
<p>Zipファイルを解凍して、実行ファイルのみ保存すればOKです。</p>
<p>MacならUnix実行ファイル、Windowsだとexeファイルになってるはずです。</p>
<p><img decoding="async" class="alignnone wp-image-15349" src="https://myfrankblog.com/wp-content/uploads/2023/05/ba80396f68009ebd08105a3102430dba.png" alt="" width="720" height="90" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/ba80396f68009ebd08105a3102430dba.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/05/ba80396f68009ebd08105a3102430dba-300x38.png 300w, https://myfrankblog.com/wp-content/uploads/2023/05/ba80396f68009ebd08105a3102430dba-1024x128.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/05/ba80396f68009ebd08105a3102430dba-150x19.png 150w, https://myfrankblog.com/wp-content/uploads/2023/05/ba80396f68009ebd08105a3102430dba-768x96.png 768w" sizes="(max-width: 720px) 100vw, 720px" /></p>
<p>&nbsp;</p>
<p><strong>Seleniumを立ち上げる際に、ChromeDriverの場所は指定できるのでお好きな場所に保存してください。</strong></p>
<p>&nbsp;</p>
<h3>PythonでSeleniumを立ち上げる</h3>
<p>ここまできたら準備完了なので、<span style="background-color: #ffff99;"><strong>PythonでSeleniumを立ち上げてみます。</strong></span></p>
<p>ここではJupyter Lab (Jupyter NotebookでもOK) を使った立ち上げの流れをご紹介します。</p>
<p>&nbsp;</p>
<h4>Jupyter Labをインストール</h4>
<p>AnacondaをインストールしていればJupyter Labも自動でインストールされていますので、こちらの作業は不要です。</p>
<p>Pythonだけをインストールした場合は、以下のコマンドでインストールしてください。（<a href="https://jupyter.org/install">公式サイト</a>）</p>
<pre class="lang:python decode:true"># Jupyter Labをインストール
pip install jupyterlab

# Jupyter Notebookをインストール
pip install notebook</pre>
<p>&nbsp;</p>
<h4> SeleniumでChromeDriverを立ち上げる</h4>
<p>最後に<span style="background-color: #ffff99;"><strong>SeleniumでChromeDriverを立ち上げます。</strong></span></p>
<pre class="lang:python decode:true">from selenium import webdriver

# ChromeDriverを立ち上げる
driver = webdriver.Chrome(executable_path="ChromeDriverのPathを指定")</pre>
<p>&nbsp;</p>
<p>seleniumのwebdrvierをimportして、 webdriver.Chromeで立ち上げます。</p>
<p>この際、executable_pathで先ほど保存したChromeDriverのPathを指定すればOKです。</p>
<p>絶対Pathでも相対Pathでも指定が可能なので、お好きな方で設定してください。</p>
<p>&nbsp;</p>
<p>Jupyter Labのフォルダーと同じ場所の保存してる場合はこんな感じでも指定できます。</p>
<pre class="lang:python decode:true"># ChromeDriverを立ち上げる
driver = webdriver.Chrome(executable_path="./chromedriver")</pre>
<p>&nbsp;</p>
<p>プログラムを実行して少しするとChromeが立ち上がります。</p>
<p>初回の起動には少し時間がかかるかもしれません。</p>
<p>こんな感じで真っ白な画面が表示されて、上部に「Chromeは自動テスト ソフトウェアによって制御されています」と表記されてたらSeleniumでChromeを立ち上げることに成功しています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15351" src="https://myfrankblog.com/wp-content/uploads/2023/05/6087ec487f1fe4ada7a1a82928eafc0e.png" alt="" width="1200" height="744" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/6087ec487f1fe4ada7a1a82928eafc0e.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/05/6087ec487f1fe4ada7a1a82928eafc0e-300x186.png 300w, https://myfrankblog.com/wp-content/uploads/2023/05/6087ec487f1fe4ada7a1a82928eafc0e-1024x635.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/05/6087ec487f1fe4ada7a1a82928eafc0e-150x93.png 150w, https://myfrankblog.com/wp-content/uploads/2023/05/6087ec487f1fe4ada7a1a82928eafc0e-768x476.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>これで全てのプロセスが完了しました。</p>
<p>あとは任意のURLに遷移したり、ボタンをクリックしたり、テキストを入力したり色々なことがPythonを介して操作することができます。</p>
<p>ぜひとも色々と試してみてください。</p>
<p>&nbsp;</p>
<h2>Seleniumを活用した記事をご紹介</h2>
<p><img decoding="async" class="alignnone size-full wp-image-15354" src="https://myfrankblog.com/wp-content/uploads/2023/05/octavian-dan-b21Ty33CqVs-unsplash.jpg" alt="" width="1200" height="800" srcset="https://myfrankblog.com/wp-content/uploads/2023/05/octavian-dan-b21Ty33CqVs-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/05/octavian-dan-b21Ty33CqVs-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/05/octavian-dan-b21Ty33CqVs-unsplash-1024x683.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/05/octavian-dan-b21Ty33CqVs-unsplash-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/05/octavian-dan-b21Ty33CqVs-unsplash-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>最後におまけとして、本ブログでこれまで書いてきたSeleniumを利用した記事をご紹介しておきます。</p>
<p>&nbsp;</p>
<h3>国会の議事録を収集して分析</h3>
<p>まずは<span style="background-color: #ffff99;"><strong>Seleniumで国会の議事録を収集して分析した記事</strong></span>をご紹介します。</p>
<p>収集したデータを使ってワードクラウドを作ってみたり、岸田首相の「検討」の発言回数を集計したりしてみましたw</p>
<p><strong>URLの遷移、検索条件のテキスト入力やドロップダウンメニューの選択、次ページへの遷移など、いろいろな操作をSeleniumで実行しています。</strong></p>
<p>&nbsp;</p>
<h4>Seleniumを使ってデータを収集</h4>
			<a href="https://myfrankblog.com/scraping_national_diet_minutes/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="615" src="https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-300x154.jpg 300w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-1024x525.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-150x77.jpg 150w, https://myfrankblog.com/wp-content/uploads/2022/05/aditya-joshi-FOhw4A1CR1Q-unsplash-768x394.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonコード解説】Seleniumで国会会議録検索システムをスクレイピングしてみる</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h4>首相の国会発言をワードクラウドで分析</h4>
			<a href="https://myfrankblog.com/python-data-analysis-prime-minister-abe/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="800" src="https://myfrankblog.com/wp-content/uploads/2020/07/marco-oriolesi-wqLGlhjr6Og-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2020/07/marco-oriolesi-wqLGlhjr6Og-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2020/07/marco-oriolesi-wqLGlhjr6Og-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2020/07/marco-oriolesi-wqLGlhjr6Og-unsplash-1024x682.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2020/07/marco-oriolesi-wqLGlhjr6Og-unsplash-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonでデータ分析】安倍首相の国会発言を集めてワードクラウドにしてみた！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
			<a href="https://myfrankblog.com/generate_wordcloud_with_pm_kishida_comments/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="900" height="500" src="https://myfrankblog.com/wp-content/uploads/2022/05/de8a9119fee26aa2171620860109cf81.png" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/05/de8a9119fee26aa2171620860109cf81.png 900w, https://myfrankblog.com/wp-content/uploads/2022/05/de8a9119fee26aa2171620860109cf81-300x167.png 300w, https://myfrankblog.com/wp-content/uploads/2022/05/de8a9119fee26aa2171620860109cf81-150x83.png 150w, https://myfrankblog.com/wp-content/uploads/2022/05/de8a9119fee26aa2171620860109cf81-768x427.png 768w" sizes="(max-width: 900px) 100vw, 900px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonでデータ分析】岸田首相の就任後6ヶ月間の国会発言をワードクラウドにしてみる</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h4>岸田首相の「検討」の発言回数</h4>
			<a href="https://myfrankblog.com/count_kento_by_prime_minister_kishida/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="800" src="https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="国会の議事録データを収集して岸田首相の「検討」の発言回数を集計してみた【Python】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-1024x683.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2022/12/kenny-eliason-2RRq1BHPq4E-unsplash-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">国会の議事録データを収集して岸田首相の「検討」の発言回数を集計してみた【Python】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h4>Pythonによるワードクラウドの作成方法</h4>
			<a href="https://myfrankblog.com/generate_wordcloud_with_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="668" src="https://myfrankblog.com/wp-content/uploads/2022/05/aec8f4fbb9bbf3b67b1693364b0da700.png" class="attachment-full size-full wp-post-image" alt="【コード解説】Pythonで岸田首相の所信表明をワードクラウド化してみる" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/05/aec8f4fbb9bbf3b67b1693364b0da700.png 1200w, https://myfrankblog.com/wp-content/uploads/2022/05/aec8f4fbb9bbf3b67b1693364b0da700-300x167.png 300w, https://myfrankblog.com/wp-content/uploads/2022/05/aec8f4fbb9bbf3b67b1693364b0da700-1024x570.png 1024w, https://myfrankblog.com/wp-content/uploads/2022/05/aec8f4fbb9bbf3b67b1693364b0da700-150x84.png 150w, https://myfrankblog.com/wp-content/uploads/2022/05/aec8f4fbb9bbf3b67b1693364b0da700-768x428.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【コード解説】Pythonでワードクラウドを作成してみる【MeCabとwordcloudで簡単実装】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>おはぎゃーのプロセスを自動化する</h3>
<p>次におはぎゃープロジェクトですw</p>
<p><span style="background-color: #ffff99;"><strong>株クラではお馴染みのおはぎゃーのプロセスを自動化</strong></span>してみました。</p>
<p>おはぎゃーとは「おはよう」 + 「（株価が下がって「ぎゃー」）を組み合わせた造語で、朝起きてアメリカ株が暴落してたりすると、finvizの株価ヒートマップのスクショとともに「おはぎゃー」とツイートする人が続出します。</p>
<p>このプロセスをPythonで自動化してみました。Seleniumを使うとスクショの取得と保存までできます。</p>
<p><strong>ここではページ遷移とスクリーンショットの取得と保存をSeleniumで実行しています。</strong></p>
<p>&nbsp;</p>
<h4>まとめ記事</h4>
			<a href="https://myfrankblog.com/automating_ohagya_process/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="795" src="https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-300x199.jpg 300w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-1024x678.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-150x99.jpg 150w, https://myfrankblog.com/wp-content/uploads/2021/03/aaron-blanco-tejedor-VBe9zj-JHBs-unsplash-768x509.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonでデータ分析】株クラで目にする「おはぎゃー」のプロセスを自動化してみた！</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h4>Seleniumでfinvizからスクリーンショットを取得して保存する</h4>
			<a href="https://myfrankblog.com/finviz_screenshot_with_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="849" height="523" src="https://myfrankblog.com/wp-content/uploads/2021/03/6ca5455cd1ac43e37dd21acb1f502367.png" class="attachment-full size-full wp-post-image" alt="【Pythonコード解説】Seleniumでfinvizのヒートマップのスクショを保存する" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/03/6ca5455cd1ac43e37dd21acb1f502367.png 849w, https://myfrankblog.com/wp-content/uploads/2021/03/6ca5455cd1ac43e37dd21acb1f502367-300x185.png 300w, https://myfrankblog.com/wp-content/uploads/2021/03/6ca5455cd1ac43e37dd21acb1f502367-150x92.png 150w, https://myfrankblog.com/wp-content/uploads/2021/03/6ca5455cd1ac43e37dd21acb1f502367-768x473.png 768w" sizes="(max-width: 849px) 100vw, 849px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonコード解説】Seleniumでfinvizのヒートマップのスクショを保存する</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h4>OpenCVを使って「おはぎゃー」を判定する</h4>
			<a href="https://myfrankblog.com/analyze_finviz_heatmap_with_opencv/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="960" src="https://myfrankblog.com/wp-content/uploads/2021/03/ohagya-matome.jpg" class="attachment-full size-full wp-post-image" alt="" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2021/03/ohagya-matome.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2021/03/ohagya-matome-300x240.jpg 300w, https://myfrankblog.com/wp-content/uploads/2021/03/ohagya-matome-1024x819.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2021/03/ohagya-matome-150x120.jpg 150w, https://myfrankblog.com/wp-content/uploads/2021/03/ohagya-matome-768x614.jpg 768w, https://myfrankblog.com/wp-content/uploads/2021/03/ohagya-matome-1536x1229.jpg 1536w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonコード解説】OpenCVを使ってfinvizのヒートマップ画像を解析する</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>Seleniumを使ってInstagramで自動いいね！を押す</h3>
<p>Seleniumを使えば、<span style="background-color: #ffff99;"><strong>Instagramで自動でいいね！を押す</strong></span>こともできます。</p>
<p>アカウントにログインして、任意のキーワードで検索、投稿を選択していいね！を押す、みたいな流れを自動化することができます。</p>
<p>やりすぎるとBot判定されるので要注意ですw</p>
<p><strong>Instagramへのログイン、テキスト入力して検索、結果からいいね！をクリックするまでの動作をSeleniumで実行しています。</strong></p>
			<a href="https://myfrankblog.com/instagram_auto_favorite_with_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="800" src="https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash.jpg" class="attachment-full size-full wp-post-image" alt="【Pythonコード解説】SeleniumでInstagramの自動いいね！をしてみる" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-300x200.jpg 300w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-1024x682.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-150x100.jpg 150w, https://myfrankblog.com/wp-content/uploads/2022/03/solen-feyissa-KWZa42a1kds-unsplash-768x512.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Pythonコード解説】SeleniumでInstagramの自動いいね！をしてみる</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h3>SBI証券で自動売買システムを構築する</h3>
<p><span style="background-color: #ffff99;"><strong>Seleniumを使えば自動売買システムを構築する</strong></span>ことも可能です。</p>
<p>本ブログではSBI証券を使って、PythonとSeleniumで自動売買システムを構築するために役立つ記事を紹介しています。</p>
<p>&nbsp;</p>
<p><strong>SBI証券へのログイン、テキスト入力やドロップダウンメニューの選択、ボタンのクリックなどあらゆる操作をSeleniumで実装しています。</strong></p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
			<a href="https://myfrankblog.com/order_by_sbi_with_python_selenium/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券から日本株を売買する方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/order_by_sbi_with_python_and_selenium_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券から日本株を売買する方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>本記事では、「<span style="background-color: #ffff99;"><strong>PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！</strong></span>」というテーマで、PythonでSelenumを利用するまでに必要な流れを解説しました。</p>
<p>&nbsp;</p>
<p>Seleniumを使えば、普段我々がブラウザ上で行なっているあらゆる操作をプログラムで実行することができます。</p>
<p>データの収集やWebサイトの動作テストなど、色々な場面で活用することができます。</p>
<p>マニュアル作業をSeleniumを使って自動化することができれば人生が大きく変わります。</p>
<p>単調な作業はプログラムにやらせておいて、自分は他の作業をすることだってできますし、早めに仕事を終えて帰ることだってできますw</p>
<p>&nbsp;</p>
<p><strong>この記事を読んで無事にSeleniumを利用できる環境が構築できていると嬉しいです。</strong></p>
<p><strong>そして皆さんの人生が少しでも効率化されるともっと嬉しいです。</strong></p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p>&nbsp;</p>The post <a href="https://myfrankblog.com/how_to_setup_selenium_with_python/">PythonでSeleniumを利用する方法！セットアップの流れを徹底解説します！</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】SeleniumでSBI証券から日本株の約定履歴を収集する方法【自動売買への道】</title>
		<link>https://myfrankblog.com/get_execution_history_by_sbi_with_python_selenium/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=get_execution_history_by_sbi_with_python_selenium</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 06 May 2023 09:00:35 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[Pythonで株式投資]]></category>
		<category><![CDATA[Pythonコード解説]]></category>
		<category><![CDATA[SBI証券]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15178</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「【Python】SeleniumでSBI証券から日本株の約定履歴を収集する方法」です。 &#160; PythonとSeleniumを使って、SBI証券のサイ ...</p>
The post <a href="https://myfrankblog.com/get_execution_history_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の約定履歴を収集する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の約定履歴を収集する方法</strong></span>」です。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使って、<strong>SBI証券のサイトから日本株の約定履歴を収集する操作を自動化</strong>してみます。</p>
<p>月別の売買金額を集計したり、株価チャートに売買タイミングを表示して確認したり、いろいろなことに活用することができます。</p>

<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>
<h2>SBI証券へのログイン</h2>
<p>事前準備として、<strong>PythonとSeleniumでSBI証券にログインしておく</strong>必要があります。</p>
<p>Seleniumの準備やSBI証券へログインする方法については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説しています。</p>
<p>&nbsp;</p>
<p>ログインが完了したら、本記事で紹介するコードを実行することができます。</p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>日本株の約定履歴を収集するまでの流れ</h2>
<p>次に<strong>PythonとSeleniumでSBI証券のサイトから日本株の約定履歴を収集するまでの流れ</strong>について確認します。</p>
<p>ざっくりこんな感じかと思います。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>日本株を売買するまでの流れ</p><div class="st-in-mybox">
<ol>
<li>（SeleniumでSBI証券にログイン）</li>
<li>「口座管理」から「取引履歴」ページへ遷移する</li>
<li>条件を選択する</li>
<li>「照会」ボタンをクリックする</li>
<li>結果を収集する</li>
</ol>
</div></div>
<p>&nbsp;</p>
<p>1については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説している内容になるので、（）書きにしました。</p>
<p>本記事では1はスキップして、<strong>2〜5を実装する方法</strong>を解説していきます。</p>
<p>&nbsp;</p>
<h2>PythonとSeleniumでSBI証券サイトから日本株の約定履歴収集を実装する</h2>
<p>それでは2~5の流れを順番に解説していきます。</p>
<p>&nbsp;</p>
<h3>「口座管理」から「取引履歴」ページへ遷移する</h3>
<p>まずは<strong><span style="background-color: #ffff99;">約定履歴のページに遷移</span></strong>します。</p>
<p>SBI証券にログインしてから、「口座管理」→「取引履歴」とクリックすればOKです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15215" src="https://myfrankblog.com/wp-content/uploads/2023/03/f8c63d152bb843e6a80e49d2a85d80de.png" alt="" width="1200" height="200" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/f8c63d152bb843e6a80e49d2a85d80de.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/f8c63d152bb843e6a80e49d2a85d80de-300x50.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/f8c63d152bb843e6a80e49d2a85d80de-1024x171.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/f8c63d152bb843e6a80e49d2a85d80de-150x25.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/f8c63d152bb843e6a80e49d2a85d80de-768x128.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>Chromeの「検証」から該当要素を確認してみます。</p>
<p>「口座管理」については<strong>title=&#8221;口座管理&#8221;</strong>となっています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15217" src="https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1.png" alt="" width="1438" height="512" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1.png 1438w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-300x107.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-1024x365.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-150x53.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/63ad4c66859540e7c598c9c35da0dee1-768x273.png 768w" sizes="(max-width: 1438px) 100vw, 1438px" /></p>
<p>&nbsp;</p>
<p>「取引履歴」については、titleやaltなどの要素はありませんが、<strong>aタグで文字列が&#8221;取引履歴&#8221;</strong>となっています。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15216" src="https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057.png" alt="" width="1200" height="219" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-300x55.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-1024x187.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-150x27.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/6055e1e2fa41e0e6a5094d2d396b9057-768x140.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>これらを利用してSeleniumでページ遷移させてみます。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 口座管理ページへ遷移
driver.find_element_by_css_selector("img[title=口座管理]").click()
driver.implicitly_wait(60)

# 取引履歴ページへ遷移
driver.find_element_by_link_text("取引履歴").click()
driver.implicitly_wait(60)</pre>
<p>&nbsp;</p>
<p>データの読み込み時間を考慮して、driver.implicitly_wait(60)を加えました。</p>
<p>これは次の処理を行うにあたり、<span style="background-color: #ffff99;"><strong>対象となる要素が見つかるまで待機する</strong></span>という命令になります。</p>
<p>これがないとページが読み込まれる前に値を入力しようしたり次の処理を行おうとしてエラーが発生する場合があるので、処理に時間がかかる箇所に追加しておくとプログラムの安定感が増します。</p>
<p>&nbsp;</p>
<p>これで<strong>「約定履歴」のページへ遷移</strong>することができます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15218" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1.jpg" alt="" width="1200" height="599" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-300x150.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-1024x511.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-150x75.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-768x383.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>これで最初のステップはOKです。</p>
<p>&nbsp;</p>
<h3>条件を選択する</h3>
<p>次に<span style="background-color: #ffff99;"><strong>条件を選択</strong></span>します。</p>
<p>「約定履歴」を参照する際には、いろいろな条件を設定することができます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15218" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1.jpg" alt="" width="1200" height="599" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-300x150.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-1024x511.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-150x75.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_1-768x383.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>設定できるのは次の4つです。</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>ポイント</p><div class="st-in-mybox">
<ul>
<li>商品指定</li>
<li>銘柄指定</li>
<li>約定日</li>
<li>1ページあたりの表示件数</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>これらをSeleniumを使って設定していきます。</p>
<p>&nbsp;</p>
<h4>商品指定</h4>
<p>まずは<span style="background-color: #ffff99;"><strong>商品指定</strong></span>です。</p>
<p>&nbsp;</p>
<p>これは<strong>ラジオボタン</strong>になっています。</p>
<p>ラジオボタンは要素をクリックすれば選択することができるので、各要素を判定できればOKです。</p>
<p>HTMLを見ると、それぞれにidが付与されていることが確認できます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15219" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_2.jpg" alt="" width="1200" height="658" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_2.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_2-300x165.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_2-1024x561.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_2-150x82.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_2-768x421.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>すべての商品ならid=&#8221;all&#8221;、株式現物ならid=&#8221;sakiT&#8221;、といったようにidが設定されているので、これを利用すれば任意の商品を設定することができます。</p>
<p>今回は商品とidを紐づけられる辞書を作成して対応しました。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 商品指定
product_dict = {
    "すべての商品": "all",
    "株式現物": "sakiT",
    "株式信用": "shinT",
    "投資信託": "touzi",
    "eワラント": "caba",
    "上場カバードワラント": "stCW"
}
product = "すべての商品"
driver.find_element_by_id(product_dict[product]).click()</pre>
<p>&nbsp;</p>
<p>これで任意の商品を選択することができます。</p>
<p>&nbsp;</p>
<h4>銘柄指定</h4>
<p>次に<span style="background-color: #ffff99;"><strong>銘柄指定</strong></span>です。</p>
<p>こちらは<strong>入力タイプ</strong>ですね。</p>
<p>&nbsp;</p>
<p>HTMLを見ると、name=&#8221;web_sec_code&#8221;となっているのでこれを利用します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15220" src="https://myfrankblog.com/wp-content/uploads/2023/03/b0be48ef696df5c8230bd6f1b72505e6.png" alt="" width="1200" height="189" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/b0be48ef696df5c8230bd6f1b72505e6.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/b0be48ef696df5c8230bd6f1b72505e6-300x47.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/b0be48ef696df5c8230bd6f1b72505e6-1024x161.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/b0be48ef696df5c8230bd6f1b72505e6-150x24.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/b0be48ef696df5c8230bd6f1b72505e6-768x121.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>文字列を入力するにはsend_keys()を使います。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 銘柄指定
ticker = 7203
driver.find_element_by_name("web_sec_code").send_keys(ticker)</pre>
<p><img decoding="async" class="alignnone size-full wp-image-15221" src="https://myfrankblog.com/wp-content/uploads/2023/03/ca0afea63ef5bbcd66d8a781e5f1089d.png" alt="" width="1144" height="608" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/ca0afea63ef5bbcd66d8a781e5f1089d.png 1144w, https://myfrankblog.com/wp-content/uploads/2023/03/ca0afea63ef5bbcd66d8a781e5f1089d-300x159.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/ca0afea63ef5bbcd66d8a781e5f1089d-1024x544.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/ca0afea63ef5bbcd66d8a781e5f1089d-150x80.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/ca0afea63ef5bbcd66d8a781e5f1089d-768x408.png 768w" sizes="(max-width: 1144px) 100vw, 1144px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h4>約定日</h4>
<p>次に<span style="background-color: #ffff99;"><strong>約定日</strong></span>です。</p>
<p>&nbsp;</p>
<p>こちらは<strong>ドロップダウンメニュー</strong>ですね。</p>
<p>1ページあたりの表示件数についても同じドロップダウンメニューです。</p>
<p>ここでは約定日だけ解説します。</p>
<p>&nbsp;</p>
<p>それぞれの要素をチェックすると、それぞれnameが付与されていることがわかります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15222" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_3.jpg" alt="" width="1200" height="638" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_3.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_3-300x160.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_3-1024x544.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_3-150x80.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_3-768x408.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>これらの要素にアクセスして値を選択すればOKです。</p>
<p>Seleniumでドロップダウンメニューを選択するためには、<strong>selenium.webdriver.support.select.Select</strong>を使います。</p>
<p>&nbsp;</p>
<p>全て同じやり方なので、ここでは約定日の開始年の設定だけ解説します。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># from 年
from_year_div = driver.find_element_by_name("ref_from_yyyy")
from_year_options = Select(from_year_div)

# 値の取得　ついでに文字列をintに変換
from_year_value_list = [int(y.get_attribute("value")) for y in from_year_options.options]</pre>
<p>&nbsp;</p>
<p>こんな感じでSelectを使います。対象の要素を取得してSelectに引き渡せばOKです。</p>
<p>ここから選択できる値を取得することもできます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15223" src="https://myfrankblog.com/wp-content/uploads/2023/03/9e69ec9e8f83f4495a739460fe857fa9.png" alt="" width="179" height="66" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/9e69ec9e8f83f4495a739460fe857fa9.png 179w, https://myfrankblog.com/wp-content/uploads/2023/03/9e69ec9e8f83f4495a739460fe857fa9-150x55.png 150w" sizes="(max-width: 179px) 100vw, 179px" /></p>
<p>&nbsp;</p>
<p>値を選択する際には、値を直接指定することもできますし、indexで指定することもできます。</p>
<p>値を直接指定する場合は該当する値がない場合はエラーになってしまうのでindexで選択する方が無難です。</p>
<p>&nbsp;</p>
<p>先ほど作成したfrom_year_value_listから任意の値を検索してそのindexを利用することもできます。</p>
<p>この場合intで指定できるので使い勝手が良くなります。</p>
<p>&nbsp;</p>
<p>次のコードでは全て2022年を選択しています。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># indexで指定
from_year_options.select_by_index(1)

# from_year_value_listを利用してindexを指定
from_year_options.select_by_index(from_year_value_list.index(2022))

# 値を直接指定
from_year_options.select_by_value("2022")</pre>
<p>&nbsp;</p>
<p>どれを使っても結果は変わらないのでお好きなものを選んでいただければOKです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15224" src="https://myfrankblog.com/wp-content/uploads/2023/03/54554d1b37bd6ff53d208155f6ad4dfa.png" alt="" width="1128" height="596" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/54554d1b37bd6ff53d208155f6ad4dfa.png 1128w, https://myfrankblog.com/wp-content/uploads/2023/03/54554d1b37bd6ff53d208155f6ad4dfa-300x159.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/54554d1b37bd6ff53d208155f6ad4dfa-1024x541.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/54554d1b37bd6ff53d208155f6ad4dfa-150x79.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/54554d1b37bd6ff53d208155f6ad4dfa-768x406.png 768w" sizes="(max-width: 1128px) 100vw, 1128px" /></p>
<p>&nbsp;</p>
<p>同じ要領で、その他のドロップダウンメニューもSeleniumで操作することができます。</p>
<p>&nbsp;</p>
<p>全要素を網羅したコードは最後にまとめてご紹介します。</p>
<p>ここでは一旦次に進みます。</p>
<p>&nbsp;</p>
<h3>「照会」ボタンをクリックする</h3>
<p>条件の設定が完了したら<span style="background-color: #ffff99;"><strong>「照会」ボタンをクリック</strong></span>します。</p>
<p>&nbsp;</p>
<p>要素を確認すると、<strong>name=&#8221;ACT_search&#8221;</strong>となっているのでこれを利用します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15225" src="https://myfrankblog.com/wp-content/uploads/2023/03/95c1d007ae39f863c0e9d8ede91d10e4.png" alt="" width="1200" height="202" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/95c1d007ae39f863c0e9d8ede91d10e4.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/95c1d007ae39f863c0e9d8ede91d10e4-300x51.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/95c1d007ae39f863c0e9d8ede91d10e4-1024x172.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/95c1d007ae39f863c0e9d8ede91d10e4-150x25.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/95c1d007ae39f863c0e9d8ede91d10e4-768x129.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 「照会」をクリック
driver.find_element_by_name("ACT_search").click()</pre>
<p>&nbsp;</p>
<p>これで約定履歴が表示されます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15227" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_4_2.jpg" alt="" width="1000" height="888" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_4_2.jpg 1000w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_4_2-300x266.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_4_2-150x133.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_history_4_2-768x682.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>&nbsp;</p>
<p>僕の取引履歴が丸見えですが、こんな感じで表示されたらOKです。</p>
<p>&nbsp;</p>
<h3>結果を収集する</h3>
<p>最後に表示された<span style="background-color: #ffff99;"><strong>取引履歴の結果を収集</strong></span>します。</p>
<p>&nbsp;</p>
<h4>データの収集</h4>
<p>これには<strong>Beautifulsoup</strong>を使っていきます。</p>
<p>テーブルの各行にアクセスして順番に収集していけばOKです。</p>
<p>&nbsp;</p>
<p>さらにデータが多い場合はページが分割されているので、これも考慮する必要があります。</p>
<p>「次へ→」ボタンがある際には次のページが存在すると判断できるのでこれを利用します。</p>
<p>「次へ→」ボタンが存在し続ける限りはずっと次のページに遷移してデータを収集するような仕組みにします。</p>
<p>&nbsp;</p>
<p>1つずつ解説していると長くなってしまうのでここではコードをまとめてご紹介します。</p>
<p>なるべる多くのコメントをつけるようにしました。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from bs4 import BeautifulSoup
import bs4
import unicodedata
import pandas as pd
import re

# 各行のデータを格納する変数を定義
data = []

# 次ページが存在するかをチェックするための変数を定義
is_next_page_available = True

# is_next_page_availableがTrueである限り処理を繰り返す
while is_next_page_available:
    
    # htmlを取得
    html = BeautifulSoup(driver.page_source, "html.parser")
    
    # tableを取得
    table = html.find("tr", {"id": "tr_a_color"}).findParent("table")

    # 全てのtr要素をチェック　一行目はカラム名なのでスキップする
    for tr in table.findAll("tr")[1:]:

        # 行データを格納するリストを定義
        row = []

        # 全てのtd要素からテキストを抽出
        for td in tr.findAll("td"):

            # 各contentをチェック
            for c in td.contents:

                # 要素の種類によってテキストの抽出方法を切り替える
                if isinstance(c, bs4.element.NavigableString):
                    text = c.strip()
                elif isinstance(c, bs4.element.Tag):
                    text = c.getText().strip()

                # 正規化
                text = unicodedata.normalize("NFKC", text)

                if text != "":
                    # 改行をチェック
                    for t in text.splitlines():
                        # スペース区切りをチェック
                        for t2 in t.split(" "):
                            if t2 != "":
                                # rowに追加
                                row.append(t2)
        
        # dataに追加
        data.append(row)
    
    # 次ページがあるかチェック　あればクリック、なければ終了
    if html.find("u", text=re.compile("次へ→")):
        driver.find_element_by_link_text("次へ→").click()
        driver.implicitly_wait(60)
    else:
        is_next_page_available = False


# カラム名を定義
columns = ["約定日", "銘柄", "コード", "市場", "取引", "預り", "課税", "約定数量", 
           "約定単価", "手数料/諸経費等", "税額", "受渡日", "受渡金額/決済損益"]

# DataFrameに変換
df = pd.DataFrame(data, columns=columns)</pre>
<p>&nbsp;</p>
<p>これでデータがきれいに収集できます。</p>
<p>１つのセル内に複数の要素がごちゃ混ぜになっているので、データをきれいに収集するのは少し厄介でコードが複雑になってしまったのですがなんとかなりましたw</p>
<p><img decoding="async" class="alignnone size-full wp-image-15228" src="https://myfrankblog.com/wp-content/uploads/2023/03/1294e907120cc5f3c40d65501fe35c48.png" alt="" width="849" height="207" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/1294e907120cc5f3c40d65501fe35c48.png 849w, https://myfrankblog.com/wp-content/uploads/2023/03/1294e907120cc5f3c40d65501fe35c48-300x73.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/1294e907120cc5f3c40d65501fe35c48-150x37.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/1294e907120cc5f3c40d65501fe35c48-768x187.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>&nbsp;</p>
<h4>データの整形</h4>
<p>次に修正したデータを少し<strong>整形</strong>していきます。</p>
<p>これは何をやるかによってどこまで綺麗に整形するべきかは変わってくると思うのですが、ここでは次のような作業をしました。</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>データ整形</p><div class="st-in-mybox">
<ul>
<li>「預り」から&#8221;/&#8221;を排除</li>
<li>「コード」「約定数量」をintに変換</li>
<li>「手数料/諸経費等」、「税額」、「受渡金額/決済損益」、「約定単価」をfloatに変換</li>
<li>「約定日」、「受渡日」をdatetimeに変換</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>これらを実装したコードがこちらです。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 不要な文字を削除
df["預り"] = df["預り"].apply(lambda x: x.replace("/", ""))

# 不要な文字列を削除してintに変換
df["コード"] = df["コード"].astype(int)
df["約定数量"] = df["約定数量"].apply(lambda x: int(x.replace(",", "")))

# 不要な文字列を削除してfloatに変換
df["手数料/諸経費等"] = df["手数料/諸経費等"].apply(lambda x: float(x.replace(",", "")))
df["税額"] = df["税額"].apply(lambda x: float(x.replace(",", "")))
df["受渡金額/決済損益"] = df["受渡金額/決済損益"].apply(lambda x: float(x.replace(",", "")))
df["約定単価"] = df["約定単価"].apply(lambda x: float(x.replace(",", "")))

# 日付の型変換
df["約定日"] = df["約定日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))
df["受渡日"] = df["受渡日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))</pre>
<p>&nbsp;</p>
<p>これでデータが結構きれいになります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15229" src="https://myfrankblog.com/wp-content/uploads/2023/03/c9aa7604eaf381e03fb18398027fd060.png" alt="" width="853" height="207" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/c9aa7604eaf381e03fb18398027fd060.png 853w, https://myfrankblog.com/wp-content/uploads/2023/03/c9aa7604eaf381e03fb18398027fd060-300x73.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/c9aa7604eaf381e03fb18398027fd060-150x36.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/c9aa7604eaf381e03fb18398027fd060-768x186.png 768w" sizes="(max-width: 853px) 100vw, 853px" /></p>
<p>&nbsp;</p>
<p>これで全てのプロセスが完了です。</p>
<p>あとは必要に応じてカラムを追加したり集計したりすればいろいろな分析や用途に活用できるかと思います。</p>
<p>&nbsp;</p>
<h3>最後にコードをまとめてどうぞ！</h3>
<p>最後に、これまでのコードをまとめたものを共有します。</p>
<p>解説で割愛した部分も全て網羅しています。</p>
<p>&nbsp;</p>
<p>なるべくコメントも多くつけたつもりです。</p>
<p>ちょっと長いですが、コピペ用にどうぞ。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from selenium import webdriver 
from selenium.webdriver.support.select import Select
from bs4 import BeautifulSoup
import bs4
import unicodedata
import re
import pandas as pd
import datetime

"""
ページ遷移
"""
# 口座管理ページへ遷移
driver.find_element_by_css_selector("img[title=口座管理]").click()
driver.implicitly_wait(60)

# 取引履歴ページへ遷移
driver.find_element_by_link_text("取引履歴").click()
driver.implicitly_wait(60)

"""
条件選択
"""
# 商品指定
product_dict = {
    "すべての商品": "all",
    "株式現物": "sakiT",
    "株式信用": "shinT",
    "投資信託": "touzi",
    "eワラント": "caba",
    "上場カバードワラント": "stCW"
}
product = "すべての商品"
driver.find_element_by_id(product_dict[product]).click()

# 銘柄指定
ticker = 7203
driver.find_element_by_name("web_sec_code").send_keys(ticker)

# 約定日

# from 年
from_year_div = driver.find_element_by_name("ref_from_yyyy")
from_year_options = Select(from_year_div)
from_year_value_list = [int(y.get_attribute("value")) for y in from_year_options.options]

# from 月
from_month_div = driver.find_element_by_name("ref_from_mm")
from_month_options = Select(from_month_div)
from_month_value_list = [int(m.get_attribute("value")) for m in from_month_options.options]

# from 日
from_day_div = driver.find_element_by_name("ref_from_dd")
from_day_options = Select(from_day_div)
from_day_value_list = [int(d.get_attribute("value")) for d in from_day_options.options]

# to 年
to_year_div = driver.find_element_by_name("ref_to_yyyy")
to_year_options = Select(to_year_div)
to_year_value_list = [int(y.get_attribute("value")) for y in to_year_options.options]

# to 月
to_month_div = driver.find_element_by_name("ref_to_mm")
to_month_options = Select(to_month_div)
to_month_value_list = [int(m.get_attribute("value")) for m in to_month_options.options]

# to 日
to_day_div = driver.find_element_by_name("ref_to_dd")
to_day_options = Select(to_day_div)
to_day_value_list = [int(d.get_attribute("value")) for d in to_day_options.options]

# 表示件数
max_count_div = driver.find_element_by_name("max_cnt")
max_count_options = Select(max_count_div)
max_count_value_list = [int(c.get_attribute("value")) for c in max_count_options.options]


# 約定日を設定
from_year_options.select_by_index(from_year_value_list.index(2022))
from_month_options.select_by_index(from_month_value_list.index(1))
from_day_options.select_by_index(from_day_value_list.index(1))

to_year_options.select_by_index(to_year_value_list.index(2023))
to_month_options.select_by_index(to_month_value_list.index(3))
to_day_options.select_by_index(to_day_value_list.index(31))

# 表示件数を設定
max_count_options.select_by_index(max_count_value_list.index(100))

# 「照会」をクリック
driver.find_element_by_name("ACT_search").click()
driver.implicitly_wait(60)


"""
データの収集
"""

# 各行のデータを格納する変数を定義
data = []

# 次ページが存在するかをチェックするための変数を定義
is_next_page_available = True

# is_next_page_availableがTrueである限り処理を繰り返す
while is_next_page_available:
    
    # htmlを取得
    html = BeautifulSoup(driver.page_source, "html.parser")
    
    # tableを取得
    table = html.find("tr", {"id": "tr_a_color"}).findParent("table")

    # 全てのtr要素をチェック　一行目はカラム名なのでスキップする
    for tr in table.findAll("tr")[1:]:

        # 行データを格納するリストを定義
        row = []

        # 全てのtd要素からテキストを抽出
        for td in tr.findAll("td"):
            for c in td.contents:

                # 要素の種類によってテキストの抽出方法を切り替える
                if isinstance(c, bs4.element.NavigableString):
                    text = c.strip()
                elif isinstance(c, bs4.element.Tag):
                    text = c.getText().strip()

                # 正規化
                text = unicodedata.normalize("NFKC", text)

                if text != "":
                    # 改行をチェック
                    for t in text.splitlines():
                        # スペース区切りをチェック
                        for t2 in t.split(" "):
                            if t2 != "":
                                # rowに追加
                                row.append(t2)
        
        # dataに追加
        data.append(row)
    
    # 次ページがあるかチェック　あればクリック、なければ終了
    if html.find("u", text=re.compile("次へ→")):
        driver.find_element_by_link_text("次へ→").click()
        driver.implicitly_wait(60)
    else:
        is_next_page_available = False


# カラム名を定義
columns = ["約定日", "銘柄", "コード", "市場", "取引", "預り", "課税", "約定数量", 
           "約定単価", "手数料/諸経費等", "税額", "受渡日", "受渡金額/決済損益"]

# DataFrameに変換
df = pd.DataFrame(data, columns=columns)

"""
データの整形
"""

# 不要な文字を削除
df["預り"] = df["預り"].apply(lambda x: x.replace("/", ""))

# 不要な文字列を削除してintに変換
df["コード"] = df["コード"].astype(int)
df["約定数量"] = df["約定数量"].apply(lambda x: int(x.replace(",", "")))

# 不要な文字列を削除してfloatに変換
df["手数料/諸経費等"] = df["手数料/諸経費等"].apply(lambda x: float(x.replace(",", "")))
df["税額"] = df["税額"].apply(lambda x: float(x.replace(",", "")))
df["受渡金額/決済損益"] = df["受渡金額/決済損益"].apply(lambda x: float(x.replace(",", "")))
df["約定単価"] = df["約定単価"].apply(lambda x: float(x.replace(",", "")))

# 日付の型変換
df["約定日"] = df["約定日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))
df["受渡日"] = df["受渡日"].apply(lambda x: datetime.datetime.strptime(x, "%y/%m/%d"))
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>これで、PythonとSeleniumを使って、<strong>SBI証券のサイトから日本株の約定履歴を収集することができるようになりました。</strong></p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>本記事では「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の約定履歴を収集する方法</strong></span>」について解説しました。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使えば、約定履歴の収集を自動化することができました。</p>
<p>参照時の条件選択も全てSeleniumを通じて操作することができます。</p>
<p>&nbsp;</p>
<p>これを利用すれば、日次、週次、月次の売買金額を集計したり、株価チャートに売買履歴を表示して分析したり、いろいろな用途に活用できるかと思います。</p>
<p>&nbsp;</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>The post <a href="https://myfrankblog.com/get_execution_history_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の約定履歴を収集する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法【自動売買への道】</title>
		<link>https://myfrankblog.com/collect_portfolio_from_sbi_with_python/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=collect_portfolio_from_sbi_with_python</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 29 Apr 2023 09:00:36 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[Pythonで株式投資]]></category>
		<category><![CDATA[Pythonコード解説]]></category>
		<category><![CDATA[SBI証券]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15132</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法」です。 &#160; PythonとSeleniumを使って、SBI証券 ...</p>
The post <a href="https://myfrankblog.com/collect_portfolio_from_sbi_with_python/">【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法</strong></span>」です。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使って、<strong>SBI証券から日本株のポートフォリオを取得する方法について解説</strong>していきます。</p>
<p>これで、保有株の状況（損益や評価額など）を確認することができるようになります。</p>
<p>&nbsp;</p>
<p><strong>定期的に取得すれば、資産推移をチャートにまとめたり、日々の変動率を自動モニタリングするなどといった使い方も可能です。</strong></p>

<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>
<h2>SBI証券へのログイン</h2>
<p>事前準備として、<strong>PythonとSeleniumでSBI証券にログインしておく</strong>必要があります。</p>
<p>Seleniumの準備やSBI証券へログインする方法については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説しています。</p>
<p>&nbsp;</p>
<p>ログインが完了したら、本記事で紹介するコードを実行することができます。</p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>日本株のポートフォリオを取得するまでの流れ</h2>
<p>次に<strong>PythonとSeleniumでSBI証券のサイトから日本株をポートフォリオを取得するまでの流れ</strong>について確認しておきます。</p>
<p>ざっくりとこんな感じです。</p>
<p>今回は最終的にポートフォリオを円グラフで可視化したいと思います。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>日本株を売買するまでの流れ</p><div class="st-in-mybox">
<ol>
<li>（SeleniumでSBI証券にログイン）</li>
<li>口座管理ページに遷移する</li>
<li>ポートフォリオ情報を取得する</li>
<li>データ整形を行う</li>
<li>円グラフで可視化する</li>
</ol>
</div></div>
<p>&nbsp;</p>
<p>1については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説している内容になるので、（）書きにしました。</p>
<p>本記事では1はスキップして、<strong>2〜5を実装する方法</strong>を解説していきます。</p>
<p>&nbsp;</p>
<p>具体的にはこちらの赤枠の部分のデータを収集します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15133" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1.jpg" alt="" width="1200" height="762" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-300x191.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-1024x650.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-150x95.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-768x488.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<h2>PythonとSeleniumでSBI証券から日本株のポートフォリオ取得を実装する</h2>
<p>それでは2~5の流れを順番に解説していきます。</p>
<p>&nbsp;</p>
<h3>口座管理ページに遷移する</h3>
<p>まずは<span style="background-color: #ffff99;"><strong>口座管理ページへ遷移</strong></span>します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15136" src="https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5.png" alt="" width="1200" height="166" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5.png 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-300x42.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-1024x142.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-150x21.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/a103989f8c0ab7203fff883796dc4cb5-768x106.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>Chromeの検証からHTMLソースを確認すると、title=&#8221;口座管理&#8221;となっていることが確認できます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15137" src="https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2.jpg" alt="" width="1200" height="357" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-300x89.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-1024x305.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-150x45.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/5cd89f4a80ab7482b06a1575f6ab95b2-768x228.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>この情報を利用して、Seleniumで「口座管理」をクリックします。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 口座管理ページへ遷移
driver.find_element_by_css_selector("img[title=口座管理]").click()</pre>
<p>&nbsp;</p>
<p>これで口座管理ページへ遷移することができます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15138" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2.jpg" alt="" width="1200" height="587" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-300x147.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-1024x501.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-150x73.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_portfolio_2-768x376.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<h3>ポートフォリオ情報を取得する</h3>
<p>次に<span style="background-color: #ffff99;"><strong>ポートフォリオ情報を取得</strong></span>します。</p>
<p>こちらの赤枠の部分です。今回で<strong>一番厄介な部分</strong>になります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15133" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1.jpg" alt="" width="1200" height="762" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-300x191.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-1024x650.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-150x95.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_portfolio_1-768x488.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>HTMLを見ると、<strong>特に特定できる要素がない</strong>ことがわかります。</p>
<p>tableを特定するnameやidなどの情報が存在していません。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15139" src="https://myfrankblog.com/wp-content/uploads/2023/03/9fda1b6df95be35fefbbd5846c27d672.jpg" alt="" width="1200" height="431" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/9fda1b6df95be35fefbbd5846c27d672.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/9fda1b6df95be35fefbbd5846c27d672-300x108.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/9fda1b6df95be35fefbbd5846c27d672-1024x368.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/9fda1b6df95be35fefbbd5846c27d672-150x54.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/9fda1b6df95be35fefbbd5846c27d672-768x276.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<h4>データ取得の流れ</h4>
<p>この場合、少し工夫が必要になります。</p>
<p>今回は次のような流れでデータを収集しました。他にもいろいろなやり方があると思います。</p>
<p>できる限り具体的に書きました。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>ポートフォリオ取得の流れ</p><div class="st-in-mybox">
<ol>
<li>Beautifulsoupで口座管理ページのHTMLを取得</li>
<li>全てのtable要素を取得</li>
<li>table内に別のtableが存在しない、かつ「保有株数」という文字のfontタグが存在していれば対象tableとして判断
<ol>
<li>区分情報（特定預りなど）を取得</li>
<li>tableの各行を取得する
<ol>
<li>bgcolor=&#8221;#b9e8ae&#8221;の場合、銘柄情報が含まれる行と判断して証券コードと銘柄名を取得</li>
<li>次の行から保有株数、取得単価、現在値、評価損益を取得</li>
</ol>
</li>
</ol>
</li>
</ol>
</div></div>
<p>&nbsp;</p>
<h4>コード紹介</h4>
<p>上記の方法をPythonで実装したコードがこちらです。</p>
<p>なるべくコメントを多くつけるようにしました。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from bs4 import BeautifulSoup
import re
import unicodedata

# htmlを取得
html = BeautifulSoup(driver.page_source, "html.parser")

# 全てのtableを抽出
tables = html.findAll("table")

# データを格納する変数を定義
data = []

# 各tableをチェック
for i, table in enumerate(tables):
    
    # 対象tableに該当するかチェック
    if table.find("font", text=re.compile("保有株数")) and not table.find("table"):
        
        # 区分取得
        category = table.find("b").getText().strip()
        
        # 各行のデータを取得
        for tr in table.findAll("tr"):
            
            # bgcolorで判断
            if tr.get("bgcolor") == "#b9e8ae":
                row = []

                # 証券コードと銘柄名を取得
                text = unicodedata.normalize("NFKC", tr.find("td").getText()).strip()
                row.extend(text.split(" "))

                # 保有株数, 取得単価, 現在値, 評価損益を取得
                for t in tr.findNext("tr").findAll("td"): #findNext('tr')で次の行を取得
                    row.append(t.getText().replace(",", "").replace("+", "")) # 不要な文字を排除

                # 区分を追加
                row.append(category)

                # dataに追加
                data.append(row)</pre>
<p>&nbsp;</p>
<p>これできちんとデータが取得できていることが確認できます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15140" src="https://myfrankblog.com/wp-content/uploads/2023/03/bfc7d8606a861202ae345a22d2468f98.png" alt="" width="566" height="75" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/bfc7d8606a861202ae345a22d2468f98.png 566w, https://myfrankblog.com/wp-content/uploads/2023/03/bfc7d8606a861202ae345a22d2468f98-300x40.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/bfc7d8606a861202ae345a22d2468f98-150x20.png 150w" sizes="(max-width: 566px) 100vw, 566px" /></p>
<p>&nbsp;</p>
<h4>unicodedataで文字列を統一</h4>
<p>基本的にはコメントに書いてある通りの内容になっています。</p>
<p>ここでは突然登場しているunicodedataについてだけ簡単に解説しておきます。</p>
<p>&nbsp;</p>
<p>unicodedataを使うと、<strong>文字列を統一する</strong>ことができます。</p>
<p>今回の使用例だとこんな感じになります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15141" src="https://myfrankblog.com/wp-content/uploads/2023/03/455e71983fff630f0176340c08987149.png" alt="" width="478" height="128" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/455e71983fff630f0176340c08987149.png 478w, https://myfrankblog.com/wp-content/uploads/2023/03/455e71983fff630f0176340c08987149-300x80.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/455e71983fff630f0176340c08987149-150x40.png 150w" sizes="(max-width: 478px) 100vw, 478px" /></p>
<p>&nbsp;</p>
<p>unicodedataを使用しないと、文字列のスペースが\xa0となっています。</p>
<p>unicodedataを使うことできちんとスペースとして表示されるようになりました。</p>
<p>このように文字コードによって値が変になっている場合はunicodedataを使ってきれいにすることができます。</p>
<p>全角数字とかもunicodedataを使えば半角に変換できます。</p>
<p>&nbsp;</p>
<h3>データ整形を行う</h3>
<p>次に<span style="background-color: #ffff99;"><strong>データ整形</strong></span>を行います。</p>
<p>収集したデータをDataFrameに変換して、さらに型変換はカラムの追加などといった作業を行います。</p>
<p>基本的に、スクレイピングで収集したデータは全て文字列になっているので、適切に数値に変換する作業が必要になります。</p>
<p>&nbsp;</p>
<p>今回行った作業は次の通りです。</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>データ整形</p><div class="st-in-mybox">
<ul>
<li>dataをDataFrameに変換</li>
<li>証券コード、保有株数をintに型変換、取得単価、現在値、評価損益をfloatに型変換</li>
<li>保有株数と現在地から評価額を計算</li>
</ul>
</div></div>
<p>&nbsp;</p>
<p>とてもシンプルです。</p>
<p>Pythonで実装すると次のようになります。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">import pandas as pd

# DataFrameに変換
df = pd.DataFrame(data, columns=["証券コード", "銘柄名", "保有株数", "取得単価", "現在値", "評価損益", "区分"])

# 型変換
for col in ["証券コード", "保有株数"]:
    df[col] = df[col].astype(int)
    
for col in ["取得単価", "現在値", "評価損益"]:
    df[col] = df[col].astype(float)
    
# 評価額
df["評価額"] = df["保有株数"] * df["現在値"]</pre>
<p>&nbsp;</p>
<p>dfを確認するときちんとデータが整形されていることが確認できます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15143" src="https://myfrankblog.com/wp-content/uploads/2023/03/d5d25ff247bebbd42b6d718f6f674a32.png" alt="" width="531" height="125" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/d5d25ff247bebbd42b6d718f6f674a32.png 531w, https://myfrankblog.com/wp-content/uploads/2023/03/d5d25ff247bebbd42b6d718f6f674a32-300x71.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/d5d25ff247bebbd42b6d718f6f674a32-150x35.png 150w" sizes="(max-width: 531px) 100vw, 531px" /></p>
<p>&nbsp;</p>
<p>型変換もバッチリです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15144" src="https://myfrankblog.com/wp-content/uploads/2023/03/daa10678a1371e88776d9a544fdbcab0.png" alt="" width="186" height="172" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/daa10678a1371e88776d9a544fdbcab0.png 186w, https://myfrankblog.com/wp-content/uploads/2023/03/daa10678a1371e88776d9a544fdbcab0-150x139.png 150w" sizes="(max-width: 186px) 100vw, 186px" /></p>
<p>&nbsp;</p>
<p>これでデータの準備は完了です。</p>
<p>&nbsp;</p>
<h3>円グラフで可視化する</h3>
<p>最後に取得した<span style="background-color: #ffff99;"><strong>ポートフォリオを円グラフで可視化</strong></span>してみます。</p>
<p>今回は<strong>matplotlib</strong>と<strong>plotly</strong>を使った例をご紹介します。</p>
<p>&nbsp;</p>
<h4>matplotlib</h4>
<p>まずは<strong>matplotlib</strong>です。</p>
<p>％表示にすると見やすくなります。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">import matplotlib.pyplot as plt

fig = plt.figure(figsize=(7,7))
plt.pie(
    x=df["評価額"], 
    labels=df["証券コード"], 
    counterclock=False, 
    startangle=90, 
    autopct='%1.1f%%' #%表示に変更
)</pre>
<p><img decoding="async" class="alignnone size-full wp-image-15146" src="https://myfrankblog.com/wp-content/uploads/2023/03/2aa32d95fab3688d1d5f4417dd0b8155.png" alt="" width="356" height="297" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/2aa32d95fab3688d1d5f4417dd0b8155.png 356w, https://myfrankblog.com/wp-content/uploads/2023/03/2aa32d95fab3688d1d5f4417dd0b8155-300x250.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/2aa32d95fab3688d1d5f4417dd0b8155-150x125.png 150w" sizes="(max-width: 356px) 100vw, 356px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h4>plotly</h4>
<p>次に<strong>Plotly</strong>です。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">import plotly.express as px
fig = px.pie(data_frame=df, names="証券コード", values="評価額")

fig.update_traces(textinfo="percent+label") #ラベルと％表示
fig.update_layout(showlegend=False) #凡例を非表示

fig.show()</pre>
<p><img decoding="async" class="alignnone size-full wp-image-15145" src="https://myfrankblog.com/wp-content/uploads/2023/03/d80fb6f896dda50e6d9b7b29b78ae5d4.png" alt="" width="417" height="382" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/d80fb6f896dda50e6d9b7b29b78ae5d4.png 417w, https://myfrankblog.com/wp-content/uploads/2023/03/d80fb6f896dda50e6d9b7b29b78ae5d4-300x275.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/d80fb6f896dda50e6d9b7b29b78ae5d4-150x137.png 150w" sizes="(max-width: 417px) 100vw, 417px" /></p>
<p>&nbsp;</p>
<h3>最後にコードをまとめてどうぞ！</h3>
<p>最後にここまでご紹介したコードをまとめます。</p>
<p>コピペ用にどうぞ。</p>
<p>円グラフの部分は割愛します。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from bs4 import BeautifulSoup
import re
import unicodedata
import pandas as pd

# 口座管理ページへ遷移
driver.find_element_by_css_selector("img[title=口座管理]").click()
driver.implicitly_wait(60)

# htmlを取得
html = BeautifulSoup(driver.page_source, "html.parser")

# 全てのtableを抽出
tables = html.findAll("table")

# データを格納する変数を定義
data = []

# 各tableをチェック
for i, table in enumerate(tables):
    
    # 対象tableに該当するかチェック
    if table.find("font", text=re.compile("保有株数")) and not table.find("table"):
        sample = table
        
        # 区分取得
        category = table.find("b").getText().strip()
        
        # 各行のデータを取得
        for tr in table.findAll("tr"):
            
            
            # bgcolorで判断
            if tr.get("bgcolor") == "#b9e8ae":
                sample = tr
                row = []

                # 証券コードと銘柄名を取得
                text = unicodedata.normalize("NFKC", tr.find("td").getText()).strip()
                row.extend(text.split(" "))

                # 保有株数, 取得単価, 現在値, 評価損益を取得
                for t in tr.findNext("tr").findAll("td"): #findNext('tr')で次の行を取得
                    row.append(t.getText().replace(",", "").replace("+", "")) # 不要な文字を排除

                # 区分を追加
                row.append(category)

                # dataに追加
                data.append(row)
                

# DataFrameに変換
df = pd.DataFrame(data, columns=["証券コード", "銘柄名", "保有株数", "取得単価", "現在値", "評価損益", "区分"])

# 型変換
for col in ["証券コード", "保有株数"]:
    df[col] = df[col].astype(int)
    
for col in ["取得単価", "現在値", "評価損益"]:
    df[col] = df[col].astype(float)
    
# 評価額
df["評価額"] = df["保有株数"] * df["現在値"]</pre>
<p>&nbsp;</p>
<p>これで、SBI証券から日本株のポートフォリオを自動取得することができます。</p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法</strong></span>」です。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを利用すれば、SBI証券に自動ログイン（<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">参考記事</a>）して、そこから日本株をポートフォリオを取得することができます。</p>
<p><strong>定期的に取得すれば、資産推移をチャートにまとめたり、日々の変動率を自動でモニタリングして通知を送るみたいな使い方も可能です。</strong></p>
<p>&nbsp;</p>
<p>アイデア次第ではもっといろいろな活用ができそうです。</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>The post <a href="https://myfrankblog.com/collect_portfolio_from_sbi_with_python/">【Python】SeleniumでSBI証券から日本株のポートフォリオを取得する方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法【自動売買への道】</title>
		<link>https://myfrankblog.com/cancel_order_by_sbi_with_python_selenium/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cancel_order_by_sbi_with_python_selenium</link>
		
		<dc:creator><![CDATA[TAT]]></dc:creator>
		<pubDate>Sat, 22 Apr 2023 09:00:17 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[株式投資]]></category>
		<category><![CDATA[Pythonで株式投資]]></category>
		<category><![CDATA[Pythonコード解説]]></category>
		<category><![CDATA[SBI証券]]></category>
		<guid isPermaLink="false">https://myfrankblog.com/?p=15152</guid>

					<description><![CDATA[<p>こんにちは。TATです。 今日のテーマは「【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法」です。 &#160; PythonとSeleniumを使って、SBI証券のサ ...</p>
The post <a href="https://myfrankblog.com/cancel_order_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは。TATです。</p>
<p>今日のテーマは「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法</strong></span>」です。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを使って、<strong>SBI証券のサイトから日本株の注文をキャンセルする操作を自動化</strong>してみます。</p>
<p><a href="https://myfrankblog.com/order_by_sbi_with_python_selenium/">過去の記事</a>では、Seleniumで日本株の新規の売買注文を入れる方法について解説しました。</p>
<p>今回はこの注文をキャンセルする方法を解説します。</p>

<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>
<h2>SBI証券へのログイン</h2>
<p>事前準備として、<strong>PythonとSeleniumでSBI証券にログインしておく</strong>必要があります。</p>
<p>Seleniumの準備やSBI証券へログインする方法については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説しています。</p>
<p>&nbsp;</p>
<p>ログインが完了したら、本記事で紹介するコードを実行することができます。</p>
			<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/" class="st-cardlink">
			<div class="kanren st-cardbox" >
								<dl class="clearfix">
					<dt class="st-card-img">
															<img width="1200" height="675" src="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg" class="attachment-full size-full wp-post-image" alt="【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】" decoding="async" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-300x169.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-1024x576.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-150x84.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/04/sbi_login_thumnail-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />												</dt>
					<dd>
													<h5 class="st-cardbox-t">【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】</h5>
						
																			<p class="cardbox-more">続きを見る</p>
											</dd>
				</dl>
			</div>
			</a>
			
<p>&nbsp;</p>
<h2>日本株の注文をキャンセルするまでの流れ</h2>
<p>次に<strong>PythonとSeleniumでSBI証券のサイトから日本株の注文をキャンセルするまでの流れ</strong>について確認しておきます。</p>
<p>ざっくりとこんな感じです。</p>
<p>&nbsp;</p>
<div class="st-mybox  has-title st-mybox-class" style="background:#FFFDE7;border-color:#FFD54F;border-width:2px;border-radius:5px;margin: 25px 0 25px 0;"><p class="st-mybox-title" style="color:#FFD54F;font-weight:bold;text-shadow: #fff 3px 0px 0px, #fff 2.83487px 0.981584px 0px, #fff 2.35766px 1.85511px 0px, #fff 1.62091px 2.52441px 0px, #fff 0.705713px 2.91581px 0px, #fff -0.287171px 2.98622px 0px, #fff -1.24844px 2.72789px 0px, #fff -2.07227px 2.16926px 0px, #fff -2.66798px 1.37182px 0px, #fff -2.96998px 0.42336px 0px, #fff -2.94502px -0.571704px 0px, #fff -2.59586px -1.50383px 0px, #fff -1.96093px -2.27041px 0px, #fff -1.11013px -2.78704px 0px, #fff -0.137119px -2.99686px 0px, #fff 0.850987px -2.87677px 0px, #fff 1.74541px -2.43999px 0px, #fff 2.44769px -1.73459px 0px, #fff 2.88051px -0.838246px 0px;"><i class="fa fa-check-circle st-css-no" aria-hidden="true"></i>日本株を売買するまでの流れ</p><div class="st-in-mybox">
<ol>
<li>（SeleniumでSBI証券にログイン）</li>
<li>「取引」から「注文照会 取消・訂正」ページへ遷移する</li>
<li>注文データ一覧を取得する</li>
<li>キャンセルしたい注文の「取消」ボタンをクリックする</li>
<li>取引パスワードを入力して「注文取消」ボタンをクリックする</li>
<li>遷移後のページから注文が成功したかをチェックする</li>
</ol>
</div></div>
<p>&nbsp;</p>
<p>1については<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">こちらの記事</a>で解説している内容になるので、（）書きにしました。</p>
<p>本記事では1はスキップして、<strong>2〜6を実装する方法</strong>を解説していきます。</p>
<p>&nbsp;</p>
<h2>PythonとSeleniumでSBI証券サイトから日本株の注文のキャンセルを実装する</h2>
<p>それでは2~6の流れを順番に解説していきます。</p>
<p>&nbsp;</p>
<h3>「取引」から「注文照会 取消・訂正」ページへ遷移する</h3>
<p>まずは<span style="background-color: #ffff99;"><strong>「取引」から「注文照会 取消・訂正」ページへ遷移</strong></span>します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15156" src="https://myfrankblog.com/wp-content/uploads/2023/03/5a970c0a389a57e13e3c2aa45a5cfb4b-1.png" alt="" width="1000" height="209" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/5a970c0a389a57e13e3c2aa45a5cfb4b-1.png 1000w, https://myfrankblog.com/wp-content/uploads/2023/03/5a970c0a389a57e13e3c2aa45a5cfb4b-1-300x63.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/5a970c0a389a57e13e3c2aa45a5cfb4b-1-150x31.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/5a970c0a389a57e13e3c2aa45a5cfb4b-1-768x161.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>&nbsp;</p>
<p>Chromeの「<strong>検証</strong>」からそれぞれの要素をチェックします。</p>
<p>「取引」については、title=&#8221;取引&#8221;となっているので、これを利用すれば要素を取得できます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15158" src="https://myfrankblog.com/wp-content/uploads/2023/03/158880fedfabde8420b4849722f6f560.png" alt="" width="1000" height="187" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/158880fedfabde8420b4849722f6f560.png 1000w, https://myfrankblog.com/wp-content/uploads/2023/03/158880fedfabde8420b4849722f6f560-300x56.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/158880fedfabde8420b4849722f6f560-150x28.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/158880fedfabde8420b4849722f6f560-768x144.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>&nbsp;</p>
<p>「注文照会 取消・訂正」については、特にこれを特定できる要素はありませんでした。</p>
<p>ここでは「注文照会 取消・訂正」という文字をキーにして要素を取得したいと思います。</p>
<p>「注文照会」と「取消・訂正」の間に&lt;br&gt;が入っているので要注意です。</p>
<p>文字の一部から要素を特定してみます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15157" src="https://myfrankblog.com/wp-content/uploads/2023/03/32585dc8a7153f6d4a751f75aa8c077e.png" alt="" width="1000" height="171" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/32585dc8a7153f6d4a751f75aa8c077e.png 1000w, https://myfrankblog.com/wp-content/uploads/2023/03/32585dc8a7153f6d4a751f75aa8c077e-300x51.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/32585dc8a7153f6d4a751f75aa8c077e-150x26.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/32585dc8a7153f6d4a751f75aa8c077e-768x131.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>&nbsp;</p>
<p>Seleniumで実装すると次のようなコードになります。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from selenium import webdriver 

# 注文ページへ遷移
driver.find_element_by_css_selector("img[title=取引]").click()
driver.implicitly_wait(60)    

# 注文照会、取り消し・訂正ページへ遷移
driver.find_element_by_partial_link_text("注文照会").click()
driver.implicitly_wait(60)</pre>
<p>&nbsp;</p>
<p>これで「注文照会 取消・訂正」ページへ遷移することができます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15159" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancal_order_1.jpg" alt="" width="1200" height="707" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancal_order_1.jpg 1200w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancal_order_1-300x177.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancal_order_1-1024x603.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancal_order_1-150x88.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancal_order_1-768x452.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<p>&nbsp;</p>
<p>データの読み込み時間を考慮して、driver.implicitly_wait(60)を加えました。</p>
<p>これは次の処理を行うにあたり、<span style="background-color: #ffff99;"><strong>対象となる要素が見つかるまで待機する</strong></span>という命令になります。</p>
<p>これがないとページが読み込まれる前に値を入力しようしたり次の処理を行おうとしてエラーが発生する場合があるので、処理に時間がかかる箇所に追加しておくとプログラムの安定感が増します。</p>
<p>&nbsp;</p>
<p>以上で最初のステップは完了です。</p>
<p>&nbsp;</p>
<h3>注文データ一覧を取得する</h3>
<p>次に<span style="background-color: #ffff99;"><strong>注文データの一覧を取得</strong></span>します。</p>
<p>「注文照会 取消・訂正」を見ると、現在注文中のデータ一覧を確認できます。</p>
<p>ここではデモ用に適当なオーダーを入れておきましたw</p>
<p>&nbsp;</p>
<p><img decoding="async" class="alignnone size-full wp-image-15160" src="https://myfrankblog.com/wp-content/uploads/2023/03/093cb021ddb81ada214a246d2a018c32.png" alt="" width="801" height="509" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/093cb021ddb81ada214a246d2a018c32.png 801w, https://myfrankblog.com/wp-content/uploads/2023/03/093cb021ddb81ada214a246d2a018c32-300x191.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/093cb021ddb81ada214a246d2a018c32-150x95.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/093cb021ddb81ada214a246d2a018c32-768x488.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></p>
<p>&nbsp;</p>
<h4>注文番号がわかれば特定できる</h4>
<p>重要になるのが<strong>注文番号</strong>です。</p>
<p>取消をしたい注文の注文番号がわかっていれば簡単に対象の注文を特定することができます。</p>
<p>&nbsp;</p>
<p>注文番号については、注文が完了した際に確認できます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15161" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_2.jpg" alt="" width="805" height="671" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_2.jpg 805w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_2-300x250.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_2-150x125.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_2-768x640.jpg 768w" sizes="(max-width: 805px) 100vw, 805px" /></p>
<p>&nbsp;</p>
<p>自動売買のシステムを構築する際には、この注文番号を注文完了時に何処かに保管しておくと、キャンセルするときに便利です。</p>
<p>&nbsp;</p>
<h4>とりあえず注文データ一覧を取得する</h4>
<p>ここでは注文番号を把握してない時のことを考慮して、一旦ここにあるデータを取得してみます。</p>
<p>Beautifulsoupを使ってこのテーブルにあるデータを取得しました。</p>
<p>&nbsp;</p>
<p>マルチインデックスになってるので結構厄介なのですが、注文番号が存在している行を判定して、そこから必要な情報に順番にアクセスしていきました。</p>
<p>細かい解説は割愛しますが、コード内になるべく多くのコメントをつけたので参考にしてみてください。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">import unicodedata
from bs4 import BeautifulSoup
import re
import pandas as pd

# tableを抽出, 「注文状況」というカラムを検索して、そのtableを取得
html = BeautifulSoup(driver.page_source, "html.parser")
table = html.find("th", text=re.compile("注文状況")).findParent("table") 

# データを格納する変数を定義
data = []

# tableの各行を処理する
for tr in table.find("tbody").findAll("tr"): #tbodyの全行（tr）を取得
    
    #最初のtdにa要素があれば注文番号があると判断する
    if tr.find("td").find("a"): 

        # 行のデータを格納する変数を定義
        row = []

        # 注文番号
        row.append(tr.findAll("td")[0].getText().strip())
        
        # 注文状況
        row.append(tr.findAll("td")[1].getText().strip())

        # 注文種別
        row.append(tr.findAll("td")[2].getText().strip())

        # 銘柄、コード 同じtdにまとまっているので分割してそれぞれのデータを取得する
        text = unicodedata.normalize("NFKC", tr.findAll("td")[3].getText().strip())
        row.append(text.splitlines()[0].strip().split(" ")[0])
        row.append(text.splitlines()[0].strip().split(" ")[-1])
        
        """
        ここからは次に行のデータを取得
        """
        #取引、預り、手数料　同じtd内にまとまっているので分割してそれぞれのデータを取得する
        tmp_data = []
        for t in tr.findNext("tr").findAll("td")[0].getText().strip().replace(" ", "").splitlines():
            if t!="" and t!="/":
                tmp_data.append(t)
        
        # 信用取引の場合は取得される要素数が増えるので、要素数によって処理を分ける
        if len(tmp_data)==4:
            row.extend([tmp_data[0]+tmp_data[1], tmp_data[2], tmp_data[3]])
        else:
            row.extend(tmp_data)

        # 注文日、注文期間　同じtd内にまとまっているので分割してそれぞれのデータを取得する
        row.extend(tr.findNext("tr").findAll("td")[1].getText().replace(" ", "").strip().splitlines())  

        # 注文株数、（未約定）　同じtd内にまとまっているので分割してそれぞれのデータを取得する
        row.append(tr.findNext("tr").findAll("td")[2].getText().replace(" ", "").strip().splitlines()[0])
        row.append(tr.findNext("tr").findAll("td")[2].getText().replace(" ", "").strip().splitlines()[-1])

        # 執行条件
        row.append(tr.findNext("tr").findAll("td")[3].getText().strip())

        # 注文単価、現在値
        row.extend(tr.findNext("tr").findAll("td")[4].getText().strip().replace(" ", "").splitlines())
        
        """
        ここからは2行後のデータから条件を取得　該当データがない場合は--とする
        """
        # 条件
        if not tr.findNext("tr").findNext("tr").find("td").find("a"):
            row.append(tr.findNext("tr").findNext("tr").find("td").getText().strip())
        else:
            row.append("--")

        # dataに行データを追加
        data.append(row)
        
        
# カラム名を定義
columns = ["注文番号", "注文状況", "注文種別", "銘柄", "コード", "取引", "預り", "手数料", "注文日", 
           "注文期間", "注文株数", "（未約定）", "執行条件", "注文単価", "現在値", "条件"]

# DataFrameに変換
df = pd.DataFrame(data, columns=columns)

# 注文番号をintに変換
df["注文番号"] = df["注文番号"].astype(int)</pre>
<p>&nbsp;</p>
<p>これで綺麗にデータを取得することができます。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15162" src="https://myfrankblog.com/wp-content/uploads/2023/03/9de9a90bb7ecc868fdb7eed3149c9978.png" alt="" width="848" height="233" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/9de9a90bb7ecc868fdb7eed3149c9978.png 848w, https://myfrankblog.com/wp-content/uploads/2023/03/9de9a90bb7ecc868fdb7eed3149c9978-300x82.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/9de9a90bb7ecc868fdb7eed3149c9978-150x41.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/9de9a90bb7ecc868fdb7eed3149c9978-768x211.png 768w" sizes="(max-width: 848px) 100vw, 848px" /></p>
<p>&nbsp;</p>
<p>ここから条件指定などをして取消をしたい注文を特定することができれば便利ですね。</p>
<p>&nbsp;</p>
<h3>キャンセルしたい注文の「取消」ボタンをクリックする</h3>
<p>次に<span style="background-color: #ffff99;"><strong>キャンセルの処理</strong></span>をしていきます。</p>
<p>キャンセルしたい注文が特定できれば、その注文の「取消」ボタンをクリックします。</p>
<p>&nbsp;</p>
<p>「取消」ボタンを確認すると、特に要素を特定できる要素はないので文字をキーにして要素を取得します。</p>
<pre class="lang:python decode:true "># 取消ボタンを取得
driver.find_elements_by_link_text("取消")</pre>
<p><img decoding="async" class="alignnone size-full wp-image-15163" src="https://myfrankblog.com/wp-content/uploads/2023/03/bbe18b0d44be8a2ee6fb5e59475f32f4.png" alt="" width="837" height="94" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/bbe18b0d44be8a2ee6fb5e59475f32f4.png 837w, https://myfrankblog.com/wp-content/uploads/2023/03/bbe18b0d44be8a2ee6fb5e59475f32f4-300x34.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/bbe18b0d44be8a2ee6fb5e59475f32f4-150x17.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/bbe18b0d44be8a2ee6fb5e59475f32f4-768x86.png 768w" sizes="(max-width: 837px) 100vw, 837px" /></p>
<p>&nbsp;</p>
<p>先ほど収集したテーブルデータ（df）の行数と一致していますね。</p>
<p>そしてこの取得できた要素はリスト形式になっているので、indexで特定の要素にアクセスできます。</p>
<p>これはdfのindexと一致しているので活用できます。</p>
<p>&nbsp;</p>
<p>ここでは例として注文番号「639」をキャンセルしてみましょう。</p>
<p>dfを確認するとindexは2ですので、これを利用して「取消」ボタンをクリックします。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 取消をクリック
driver.find_elements_by_link_text("取消")[2].click()</pre>
<p>&nbsp;</p>
<p>これで注文取消画面に遷移します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15165" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_3.jpg" alt="" width="1358" height="926" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_3.jpg 1358w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_3-300x205.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_3-1024x698.jpg 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_3-150x102.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_3-768x524.jpg 768w" sizes="(max-width: 1358px) 100vw, 1358px" /></p>
<h3>取引パスワードを入力して「注文取消」ボタンをクリックする</h3>
<p>注文のキャンセルを確定させるためには、<span style="background-color: #ffff99;"><strong>取引パスワードを入力して「注文取消」ボタンをクリック</strong></span>します。</p>
<p>要素を確認してみます。</p>
<p>&nbsp;</p>
<p><img decoding="async" class="alignnone size-full wp-image-15166" src="https://myfrankblog.com/wp-content/uploads/2023/03/a1b49d63f97f863670eed4fa220d67be.png" alt="" width="1360" height="328" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/a1b49d63f97f863670eed4fa220d67be.png 1360w, https://myfrankblog.com/wp-content/uploads/2023/03/a1b49d63f97f863670eed4fa220d67be-300x72.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/a1b49d63f97f863670eed4fa220d67be-1024x247.png 1024w, https://myfrankblog.com/wp-content/uploads/2023/03/a1b49d63f97f863670eed4fa220d67be-150x36.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/a1b49d63f97f863670eed4fa220d67be-768x185.png 768w" sizes="(max-width: 1360px) 100vw, 1360px" /></p>
<p>&nbsp;</p>
<p>取引パスワードはid=&#8221;pwd3&#8243;となっています。「注文取消」ボタンについては、value=&#8221;注文取消&#8221;となっているので、これらの要素を利用して処理を実装します。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true "># 取引パスワード
trade_password = "password"
driver.find_element_by_id("pwd3").send_keys(trade_password)

# 注文取消を確定
driver.find_element_by_css_selector("input[value=注文取消]").click()</pre>
<p>&nbsp;</p>
<p>これで注文取消が確定します。</p>
<p>&nbsp;</p>
<p><img decoding="async" class="alignnone size-full wp-image-15167" src="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_4.jpg" alt="" width="810" height="661" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_4.jpg 810w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_4-300x245.jpg 300w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_4-150x122.jpg 150w, https://myfrankblog.com/wp-content/uploads/2023/03/sbi_cancel_order_4-768x627.jpg 768w" sizes="(max-width: 810px) 100vw, 810px" /></p>
<p>&nbsp;</p>
<h3>遷移後のページから注文取消が成功したかをチェックする</h3>
<p>最後に<span style="background-color: #ffff99;"><strong>遷移後のページから注文取消が成功したのかどうかを確認</strong></span>します。</p>
<p>注文取消が成功すると、「ご注文を受け付けました。」という文言が表示されます。</p>
<p>これがあるかどうかをチェックすればOKです。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">html = BeautifulSoup(driver.page_source, "html.parser")
if "ご注文を受け付けました。" in html.text:
    print("注文取消が完了しました。")
else:
    print("注文取消に失敗しました。")</pre>
<p>&nbsp;</p>
<p>かなりシンプルですが、これで十分に機能します。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15168" src="https://myfrankblog.com/wp-content/uploads/2023/03/a3f050d43086dae002e5cdb38412470c.png" alt="" width="437" height="121" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/a3f050d43086dae002e5cdb38412470c.png 437w, https://myfrankblog.com/wp-content/uploads/2023/03/a3f050d43086dae002e5cdb38412470c-300x83.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/a3f050d43086dae002e5cdb38412470c-150x42.png 150w" sizes="(max-width: 437px) 100vw, 437px" /></p>
<p>&nbsp;</p>
<h4>注意点</h4>
<p>ここで1つだけ注意点です。</p>
<p>注文取消が完了してもう一度「注文照会 取消・訂正」のページを確認すると、注文状況が<strong>取消中</strong>となります。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15175" src="https://myfrankblog.com/wp-content/uploads/2023/04/6d19d01fb6956e46544da0152666b816.png" alt="" width="802" height="507" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/6d19d01fb6956e46544da0152666b816.png 802w, https://myfrankblog.com/wp-content/uploads/2023/04/6d19d01fb6956e46544da0152666b816-300x190.png 300w, https://myfrankblog.com/wp-content/uploads/2023/04/6d19d01fb6956e46544da0152666b816-150x95.png 150w, https://myfrankblog.com/wp-content/uploads/2023/04/6d19d01fb6956e46544da0152666b816-768x486.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></p>
<p>&nbsp;</p>
<p>しばらくすると取消が完了して、この行そのものが消えるのですが、しばらく残っているので連続で注文を取り消す際には注意が必要です。</p>
<p>取消中の注文は取消のリンクが無効になっているので、行数とリンクの数が合わなくなってしまいます。</p>
<p>これを調整するためには、取得したdfから注文状況が取消中になっている行を削除して、indexをリセットしてあげればOKです。</p>
<pre class="lang:python decode:true ">df = df[df["注文状況"]!="取消中"].reset_index(drop=True)</pre>
<p><img decoding="async" class="alignnone size-full wp-image-15176" src="https://myfrankblog.com/wp-content/uploads/2023/04/d2cf9c8f656fd909370e3c6429c39a6b.png" alt="" width="855" height="190" srcset="https://myfrankblog.com/wp-content/uploads/2023/04/d2cf9c8f656fd909370e3c6429c39a6b.png 855w, https://myfrankblog.com/wp-content/uploads/2023/04/d2cf9c8f656fd909370e3c6429c39a6b-300x67.png 300w, https://myfrankblog.com/wp-content/uploads/2023/04/d2cf9c8f656fd909370e3c6429c39a6b-150x33.png 150w, https://myfrankblog.com/wp-content/uploads/2023/04/d2cf9c8f656fd909370e3c6429c39a6b-768x171.png 768w" sizes="(max-width: 855px) 100vw, 855px" /></p>
<p>&nbsp;</p>
<p>これでリンクの数とdfの行数が一致します。</p>
<p>連続で注文取消を行うこともあると思うので、この処理を加えておくと安心です。</p>
<p>&nbsp;</p>
<h3>最後にコードをまとめてどうぞ！</h3>
<p>ここまでの内容で、PythonとSeleniumを使って注文をキャンセルすることができました。</p>
<p>最後に、これまでのコードをまとめたものを共有します。</p>
<p>&nbsp;</p>
<p>注文一覧のテーブルデータの取得については関数にしました。</p>
<p>なるべくコメントも多くつけましたつもりです。</p>
<p>コピペ用にどうぞ。</p>
<p>&nbsp;</p>
<pre class="lang:python decode:true ">from selenium import webdriver 
import unicodedata
from bs4 import BeautifulSoup
import re
import pandas as pd


def extract_order_list(html):
    # tableを抽出, 「注文状況」というカラムを検索して、そのtableを取得
    table = html.find("th", text=re.compile("注文状況")).findParent("table") 

    # データを格納する変数を定義
    data = []

    # tableの各行を処理する
    for tr in table.find("tbody").findAll("tr"): #tbodyの全行（tr）を取得

        #最初のtdにa要素があれば注文番号があると判断する
        if tr.find("td").find("a"): 

            # 行のデータを格納する変数を定義
            row = []

            # 注文番号
            row.append(tr.findAll("td")[0].getText().strip())

            # 注文状況
            row.append(tr.findAll("td")[1].getText().strip())

            # 注文種別
            row.append(tr.findAll("td")[2].getText().strip())

            # 銘柄、コード 同じtdにまとまっているので分割してそれぞれのデータを取得する
            text = unicodedata.normalize("NFKC", tr.findAll("td")[3].getText().strip())
            row.append(text.splitlines()[0].strip().split(" ")[0])
            row.append(text.splitlines()[0].strip().split(" ")[-1])

            """
            ここからは次に行のデータを取得
            """
            #取引、預り、手数料　同じtd内にまとまっているので分割してそれぞれのデータを取得する
            tmp_data = []
            for t in tr.findNext("tr").findAll("td")[0].getText().strip().replace(" ", "").splitlines():
                if t!="" and t!="/":
                    tmp_data.append(t)

            # 信用取引の場合は取得される要素数が増えるので、要素数によって処理を分ける
            if len(tmp_data)==4:
                row.extend([tmp_data[0]+tmp_data[1], tmp_data[2], tmp_data[3]])
            else:
                row.extend(tmp_data)

            # 注文日、注文期間　同じtd内にまとまっているので分割してそれぞれのデータを取得する
            row.extend(tr.findNext("tr").findAll("td")[1].getText().replace(" ", "").strip().splitlines())  

            # 注文株数、（未約定）　同じtd内にまとまっているので分割してそれぞれのデータを取得する
            row.append(tr.findNext("tr").findAll("td")[2].getText().replace(" ", "").strip().splitlines()[0])
            row.append(tr.findNext("tr").findAll("td")[2].getText().replace(" ", "").strip().splitlines()[-1])

            # 執行条件
            row.append(tr.findNext("tr").findAll("td")[3].getText().strip())

            # 注文単価、現在値
            row.extend(tr.findNext("tr").findAll("td")[4].getText().strip().replace(" ", "").splitlines())

            """
            ここからは2行後のデータから条件を取得　該当データがない場合は--とする
            """
            # 条件
            if not tr.findNext("tr").findNext("tr").find("td").find("a"):
                row.append(tr.findNext("tr").findNext("tr").find("td").getText().strip())
            else:
                row.append("--")

            # dataに行データを追加
            data.append(row)


    # カラム名を定義
    columns = ["注文番号", "注文状況", "注文種別", "銘柄", "コード", "取引", "預り", "手数料", "注文日", 
               "注文期間", "注文株数", "（未約定）", "執行条件", "注文単価", "現在値", "条件"]

    # DataFrameに変換
    df = pd.DataFrame(data, columns=columns)

    # 注文番号をintに変換
    df["注文番号"] = df["注文番号"].astype(int)

    # 注文状況が取消中の行を削除してindexをリセット
    df = df[df["注文状況"]!="取消中"].reset_index(drop=True) 
    
    return df


# 注文ページへ遷移
driver.find_element_by_css_selector("img[title=取引]").click()
driver.implicitly_wait(60)    

# 注文照会、取り消し・訂正ページへ遷移
driver.find_element_by_partial_link_text("注文照会").click()
driver.implicitly_wait(60)

# htmlを取得
html = BeautifulSoup(driver.page_source, "html.parser")

# 注文一覧を取得
df = extract_order_list(html)

# 任意取消をクリック ここではindexで2を指定
driver.find_elements_by_link_text("取消")[2].click()

# 取引パスワード
trade_password = "password"
driver.find_element_by_id("pwd3").send_keys(trade_password)

# 注文取消を確定
driver.find_element_by_css_selector("input[value=注文取消]").click()

# 注文取消が成功したかをチェック
html = BeautifulSoup(driver.page_source, "html.parser")
if "ご注文を受け付けました。" in html.text:
    print("注文取消が完了しました。")
else:
    print("注文取消に失敗しました。")</pre>
<p>&nbsp;</p>
<p>テーブルデータの取得がなければ結構短いコードで実装できてしまいますね。</p>
<p>dfを利用すれば、注文条件でキャンセルしたいオーダーを特定することができます。</p>
<p>注文番号がわかっていればその値がある行のindexを取得すればOKです。</p>
<p><img decoding="async" class="alignnone size-full wp-image-15169" src="https://myfrankblog.com/wp-content/uploads/2023/03/723ac127ddb1531baadc7862f347260a.png" alt="" width="848" height="194" srcset="https://myfrankblog.com/wp-content/uploads/2023/03/723ac127ddb1531baadc7862f347260a.png 848w, https://myfrankblog.com/wp-content/uploads/2023/03/723ac127ddb1531baadc7862f347260a-300x69.png 300w, https://myfrankblog.com/wp-content/uploads/2023/03/723ac127ddb1531baadc7862f347260a-150x34.png 150w, https://myfrankblog.com/wp-content/uploads/2023/03/723ac127ddb1531baadc7862f347260a-768x176.png 768w" sizes="(max-width: 848px) 100vw, 848px" /></p>
<p>&nbsp;</p>
<p>これで、PythonとSeleniumで任意の注文をキャンセルできるようになりました。</p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>本記事では「<span style="background-color: #ffff99;"><strong>【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法</strong></span>」について解説しました。</p>
<p>&nbsp;</p>
<p>PythonとSeleniumを利用すれば、SBI証券に自動ログイン（<a href="https://myfrankblog.com/login_sbi_with_selenium_and_python/">参考記事</a>）して、そこから日本株の新規注文を入れたり、本記事で紹介したように注文をキャンセルすることもできます。</p>
<p>新規注文を入れる方法については<a href="https://myfrankblog.com/order_by_sbi_with_python_selenium/">過去の記事</a>をご参照ください。</p>
<p>&nbsp;</p>
<p>最後まで読んでくださり、ありがとうございました。</p>
<p><a href="https://t.felmat.net/fmcl?ak=Y42698.1.I92033D.R840239" target="_blank" rel="nofollow noopener"><img decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y42698.I92033D.R840239" alt="" width="300" height="250" border="0" /></a></p>The post <a href="https://myfrankblog.com/cancel_order_by_sbi_with_python_selenium/">【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法【自動売買への道】</a> first appeared on <a href="https://myfrankblog.com">気ままなブログ</a>.<p>Copyright &copy; 2023 <a href="https://myfrankblog.com">気ままなブログ</a> All Rights Reserved.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
