<?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>Guzzle &#8211; ケケンタの独学ITブログ</title>
	<atom:link href="https://kekenta-it-blog.com/tag/guzzle/feed/" rel="self" type="application/rss+xml" />
	<link>https://kekenta-it-blog.com</link>
	<description>プログラミングやWeb制作の情報を発信</description>
	<lastBuildDate>Tue, 18 Mar 2025 01:55:08 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://kekenta-it-blog.com/wp-content/uploads/2023/07/cropped-KEKENTA-BLOG-32x32.png</url>
	<title>Guzzle &#8211; ケケンタの独学ITブログ</title>
	<link>https://kekenta-it-blog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【PHP】スクレイピングする方法｜データベース保存のソースコードあり</title>
		<link>https://kekenta-it-blog.com/php-scraping-use-package/</link>
					<comments>https://kekenta-it-blog.com/php-scraping-use-package/#respond</comments>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Tue, 20 Aug 2024 08:43:21 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webアプリ]]></category>
		<category><![CDATA[Composer]]></category>
		<category><![CDATA[Guzzle]]></category>
		<category><![CDATA[PHP DOM Wrapper]]></category>
		<category><![CDATA[スクレイピング]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=9759</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/eye-catch__php-scraping-use-package__9759-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>このようなお悩みをお持ちの方に向けて、この記事では PHPでスクレイピングする方法 を解説します。 PHPではパッケージを使用しなくても比較的簡単にスクレイピングする方法が用意されています。 しかし、その方法では最低限の [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/eye-catch__php-scraping-use-package__9759-1024x576.jpg" class="webfeedsFeaturedVisual" /></p><div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>PHPでスクレイピングしてみたいんだけど、やり方がわからない……</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">このようなお悩みをお持ちの方に向けて、この記事では</p>



<p class="has-text-align-center is-style-big_kakko_box wp-block-paragraph"><strong>PHPでスクレイピングする方法</strong></p>



<p class="wp-block-paragraph">を解説します。</p>



<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span data-icon="LsLightbulb" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" aria-hidden="true" class="swl-inline-icon"> </span><strong>この記事でわかること</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>PHPのライブラリパッケージを使用してスクレイピングする方法</li>



<li>スクレイピングの実践的なソースコード</li>
</ul>
</div></div>



<p class="wp-block-paragraph">PHPではパッケージを使用しなくても比較的簡単にスクレイピングする方法が用意されています。</p>



<p class="wp-block-paragraph">しかし、その方法では最低限のことしか実装できないため、当記事では応用のしやすも重視する意味で、<strong><span class="swl-marker mark_yellow">パッケージでスクレイピングする方法</span></strong>をご紹介します。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>スクレイピングが初めての方やPHPを触り始めたばかりの方にとっては難しく感じる部分もあるかと思いますが、まずは<strong>当記事のソースコードを丸々コピペして動作を確認する</strong>だけでも勉強になるかと思います。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-icon_pen wp-block-paragraph">また、記事の後半では、サイト全体に対するスクレイピングやデータベースへの保存など、<strong>より実践的なソースコードもご紹介</strong>しています。<br>基本的なソースコードだけではなく、「スクレイピングを実践で使用するイメージ」を掴んでいただければと思っています。</p>



<p class="is-style-balloon_box2 wp-block-paragraph">Webアプリ開発に興味がある方におすすめの記事</p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/board-app-php/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">掲示板アプリの作り方｜プログラミング初心者向け【PHP】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-login-app/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】ログイン機能の仕組み・ソースコード解説｜ハッシュ値とは？</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/alone-php-study/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">PHPはこうして習得した！約１年間の勉強内容【プログラミング独学】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-deploy-xserver-for-zip/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】エックスサーバーへデプロイする方法【初心者でも簡単！】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__school-php-and-wp__14099-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/school-php-and-wp/">PHPやWordPressを学ぶのにおすすめのプログラミングスクール【７選】</a>
						<span class="p-blogCard__excerpt">僕はこれまで独学でPHPを学習してきました。結論から言えば、それでもPHPを習得することはできました。 しかし、それに費やした累計学習期間は1年ほど。モチベーション&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">スクレイピングの前提知識</h2>



<h3 class="wp-block-heading">【その①】スクレイピングの仕組み</h3>



<p class="is-style-bg_stripe wp-block-paragraph"><strong>スクレイピングの大まかな流れ</strong>は以下の通りです。</p>



<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span data-icon="LsLightbulb" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" aria-hidden="true" class="swl-inline-icon"> </span><strong> スクレイピングの流れ</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>欲しい情報が掲載されているページの<strong>ドキュメントをダウンロード</strong>する</li>



<li>ダウンロードしたドキュメントを<strong>パース（構文解析）する</strong>＝どの情報がどの場所にあるのかを特定する</li>



<li>パースしたドキュメントから<strong>欲しい情報を抜き出す</strong></li>
</ul>
</div></div>



<p class="is-style-big_icon_check wp-block-paragraph">今回はこの内、①と②を<strong>パッケージで対応</strong>します。<br>③についてはPHPの基本機能で実装可能です。</p>



<h3 class="wp-block-heading">【その②】使用するパッケージ</h3>



<p class="is-style-bg_stripe wp-block-paragraph">今回のスクレイピングでは、以下の<strong>２つのパッケージ</strong>を使用します。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span><span data-icon="LsLightbulb" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" aria-hidden="true" class="swl-inline-icon"> </span><strong>使用するライブラリパッケージ</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list -list-under-dashed is-style-num_circle">
<li>Guzzle</li>



<li>PHP DOM Wrapper</li>
</ul>
</div></div>



<p class="is-style-balloon_box u-mb-ctrl u-mb-10 wp-block-paragraph"><strong>Guzzleとは？</strong></p>



<p class="has-border -border01 wp-block-paragraph">PHPのHTTPクライアントのパッケージです。<br>今回は<strong><span class="swl-marker mark_yellow">URLを指定して、そのページのドキュメントをダウンロードするために使用</span></strong>します。</p>



<p class="is-style-balloon_box u-mb-ctrl u-mb-10 wp-block-paragraph"><strong>PHP DOM Wrapperとは？</strong></p>



<p class="has-border -border01 wp-block-paragraph">Webページのドキュメントをパース（構文解析）できるパッケージです。<br>今回は<strong><span class="swl-marker mark_yellow">Guzzleでダウンロードしたドキュメントをパースするために使用</span></strong>します。</p>



<h3 class="wp-block-heading">【その③】スクレイピングを行う際の注意点</h3>



<p class="wp-block-paragraph">スクレイピングは<strong>プログラムによってWebサイトの情報を自動で抽出する技術</strong>です。</p>



<p class="wp-block-paragraph">そのため、人が手動でサイトへアクセスするのとは比にならない速度で処理が進みます。</p>



<p class="wp-block-paragraph">何も対策をしないと、最悪スクレイピング対象のサイトのサーバーが過負荷に耐えられずに落ちてしまい、運営者から法的処置を取られてしまう可能性もあります。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>スクレイピングを本番サイト上で実施する際には主に<strong>以下の点に注意</strong>しましょう！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<div class="swell-block-capbox cap_box" data-colset="col3"><div class="cap_box_ttl"><span><span data-icon="LsAlert" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDcgMzcuOSAyNy41IDQuMWMtLjctMS4zLTItMi0zLjUtMnMtMi43LjctMy41IDJMMSAzNy45Yy0uNyAxLjMtLjcgMi43IDAgNCAuNyAxLjMgMiAyIDMuNSAyaDM5LjFjMS40IDAgMi43LS43IDMuNS0yIC42LTEuMy42LTIuNy0uMS00ek0yMS41IDE3LjVjMC0xLjQgMS4xLTIuNSAyLjUtMi41czIuNSAxLjEgMi41IDIuNXYxMGMwIDEuNC0xLjEgMi41LTIuNSAyLjVzLTIuNS0xLjEtMi41LTIuNXYtMTB6TTI0IDM4Yy0xLjcgMC0zLTEuMy0zLTNzMS4zLTMgMy0zIDMgMS4zIDMgMy0xLjMgMy0zIDN6Ij48L3BhdGg+PC9zdmc+)" aria-hidden="true" class="swl-inline-icon"> </span><strong> スクレイピングの注意点</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>対象のサイトに過剰な負荷をかけないように、情報取得処理の間に待機時間を設ける</li>



<li>スクレイピングが禁止されているサイトでは行わない</li>



<li>プログラムの不具合によりアクセス先のサイトに過剰な負荷をかけないよう、ローカル環境でのテストやデバッグを徹底する</li>
</ul>
</div></div>



<p class="is-style-icon_info wp-block-paragraph">各サイトにおける<strong>スクレイピングに関するルール</strong>は、基本的に「<strong>https://ドメイン/robots.txt</strong>」に記載されています。<br>また、サービスによっては<strong>利用規約</strong>にもスクレイピングに関する禁止事項などを掲載しているので、そちらも事前にしっかり確認するようにしましょう</p>



<p class="is-style-icon_announce wp-block-paragraph">なお、この記事でご紹介するスクレイピングのソースコードでは、スクレイピング練習用サイト「<a href="https://scraping-training.vercel.app/">スクレイピング練習場</a>」様を利用させていただいています。<br>気兼ねなくスクレイピングの練習が可能ですのでご安心ください。（運営者様に感謝です）</p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">【事前準備】Composerでパッケージをインストールする</h2>



<p class="wp-block-paragraph">それでは、ここから実際にスクレイピング機能を実装するための作業を進めていきます。</p>



<p class="wp-block-paragraph">まずは今回のスクレイピングで利用する以下のパッケージをインストールしていきます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>使用するライブラリパッケージ</span></div><div class="cap_box_content">
<ul class="wp-block-list -list-under-dashed is-style-num_circle">
<li>Guzzle</li>



<li>PHP DOM Wrapper</li>
</ul>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>パッケージのインストールには<strong>Composer</strong>を使用します。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<div class="wp-block-group is-style-big_icon_good"><div class="wp-block-group__inner-container">
<p class="is-style-bg_stripe wp-block-paragraph">「<strong>Composer</strong>ってなに？」という方やまだインストールしていないという方は以下の記事をご覧ください。</p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/composer-install/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【Windows】Composerのインストール方法｜エラー時の対処も解説</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/composer-how-to/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【初心者向け】Composerの使い方を丁寧に解説！【PHP】</span>
			</a>
		</div></div></div>



<h3 class="wp-block-heading">パッケージのインストール手順</h3>



<p class="is-style-icon_pen wp-block-paragraph">この記事では<strong>XAMPP環境</strong>で操作を進めていきます。</p>



<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span data-icon="LsLightbulb" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" aria-hidden="true" class="swl-inline-icon"> </span><strong> パッケージをComposerでインストールする大まかな流れ</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>スクレイピング実装用のプロジェクトディレクトリを作成する</li>



<li>作成したプロジェクトディレクトリ内に<code class="file_name">composer.json</code>ファイルを作成する</li>



<li><code class="file_name">composer.json</code>ファイル内にパッケージインストール用の記述をする</li>
</ul>
</div></div>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">スクレイピング実装用のプロジェクトディレクトリを作成する</div><div class="swell-block-step__body">
<p class="is-style-bg_stripe wp-block-paragraph">まずはいつもPHPでアプリを作成するときと同様に、プロジェクトディレクトリを作成します。</p>


<div class="wp-block-image is-style-shadow size_s">
<figure class="aligncenter size-full"><img decoding="async" width="799" height="461" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package01.jpg" alt="プロジェクトディレクトリを作成" class="wp-image-10343" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package01.jpg 799w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package01-300x173.jpg 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package01-768x443.jpg 768w" sizes="(max-width: 799px) 100vw, 799px" /><figcaption class="wp-element-caption">プロジェクトディレクトリを作成</figcaption></figure>
</div></div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">作成したプロジェクトディレクトリ内にcomposer.jsonファイルを作成する</div><div class="swell-block-step__body">
<p class="is-style-bg_stripe wp-block-paragraph">続いて、作成したプロジェクトディレクトリ内に<code class="file_name">composer.json</code>ファイルを作成します。</p>


<div class="wp-block-image size_s is-style-shadow">
<figure class="aligncenter size-full"><img decoding="async" width="945" height="461" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package02.jpg" alt="composer.jsonファイルを作成" class="wp-image-10347" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package02.jpg 945w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package02-300x146.jpg 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package02-768x375.jpg 768w" sizes="(max-width: 945px) 100vw, 945px" /><figcaption class="wp-element-caption">composer.jsonファイルを作成</figcaption></figure>
</div></div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">composer.jsonファイル内にパッケージインストール用の記述をする</div><div class="swell-block-step__body">
<p class="is-style-bg_stripe wp-block-paragraph">普段お使いのテキストエディタで<code class="file_name">composer.json</code>ファイルを開き、下記を記述します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-file="composer.json" data-lang="JSON"><code>{
    &quot;require&quot;: {
        &quot;guzzlehttp/guzzle&quot;: &quot;*&quot;,
        &quot;scotteh/php-dom-wrapper&quot;: &quot;*&quot;
    }
}</code></pre></div>



<p class="is-style-big_icon_check wp-block-paragraph">バージョンに「*」を指定することで最新バージョンがインストールされます。</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">プロジェクトディレクトリでターミナルを開く</div><div class="swell-block-step__body">
<p class="is-style-bg_stripe wp-block-paragraph">プロジェクトディレクトリ上でターミナルを開きます。</p>



<p class="is-style-balloon_box wp-block-paragraph">Windows11の場合</p>



<p class="is-style-bg_grid has-border -border01 u-mb-ctrl u-mb-20 wp-block-paragraph">プロジェクトディレクトリ内で<strong>「右クリック」→「ターミナルで開く」をクリック</strong></p>



<p class="is-style-balloon_box wp-block-paragraph">Windows10の場合</p>



<p class="has-border -border01 is-style-bg_grid wp-block-paragraph">プロジェクトディレクトリ内で<strong>「Shift + 右クリック」→「ターミナルで開く」をクリック</strong><br>（※「ターミナルで開く」が無ければ「コマンドプロンプト」でもOK）</p>


<div class="wp-block-image size_s is-style-shadow">
<figure class="aligncenter size-full"><img decoding="async" width="745" height="400" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package03.jpg" alt="ターミナルを開く" class="wp-image-10344" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package03.jpg 745w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package03-300x161.jpg 300w" sizes="(max-width: 745px) 100vw, 745px" /><figcaption class="wp-element-caption">ターミナルを開く</figcaption></figure>
</div></div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">composer installコマンドを実行する</div><div class="swell-block-step__body">
<p class="is-style-bg_stripe wp-block-paragraph">プロジェクトディレクトリ上でターミナルを開いたら<code>composer install</code>コマンドを実行します。</p>


<div class="wp-block-image is-style-shadow size_s">
<figure class="aligncenter size-full"><img decoding="async" width="745" height="400" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package04.jpg" alt="composer installコマンドを実行" class="wp-image-10346" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package04.jpg 745w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package04-300x161.jpg 300w" sizes="(max-width: 745px) 100vw, 745px" /><figcaption class="wp-element-caption">composer installコマンドを実行</figcaption></figure>
</div>


<div class="wp-block-group is-style-big_icon_good"><div class="wp-block-group__inner-container">
<p class="is-style-icon_good wp-block-paragraph">少し待ってみて、プロジェクトディレクトリ内に<code class="dir_name">vendor</code>ディレクトリと<code class="file_name">composer.lock</code>ファイルが作成されていればOKです。</p>


<div class="wp-block-image is-style-shadow size_s">
<figure class="aligncenter size-full"><img decoding="async" width="809" height="461" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package05.jpg" alt="vendorディレクトリとcomposer.lockファイルを確認" class="wp-image-10345" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package05.jpg 809w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package05-300x171.jpg 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package05-768x438.jpg 768w" sizes="(max-width: 809px) 100vw, 809px" /><figcaption class="wp-element-caption">vendorディレクトリとcomposer.lockファイルを確認</figcaption></figure>
</div></div></div>



<p class="is-style-icon_info wp-block-paragraph">もし何らかの<span class="swl-marker mark_orange"><strong>エラーが発生した場合</strong></span>は<br><strong>①<code class="file_name">composer.json</code>ファイルに不要な全角スペースや文字列が含まれている<br>②コマンドの入力ミス<br>③ターミナルをプロジェクトディレクトリ以外の場所で開いてしまっている</strong><br>などの原因が考えられます。</p>
</div></div>
</div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以上で今回使用する<strong>２つのパッケージのインストールが完了</strong>しました！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">このあとの章からは、実際にこれらの<strong>パッケージをファイル内に読み込んでスクレイピング</strong>を行っていきます。</p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">【基本】PHPでスクレイピングをする</h2>



<p class="is-style-icon_announce wp-block-paragraph">前述のとおり、今回は<a href="https://scraping-training.vercel.app/">スクレイピング練習場</a>をお借りしてスクレイピングを実行していきます。</p>



<p class="has-text-align-center is-style-balloon_box wp-block-paragraph">トップ画面</p>


<div class="wp-block-image is-style-browser_mac size_s">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="514" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/image-5-1024x514.png" alt="スクレイピング練習場" class="wp-image-10317" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/08/image-5-1024x514.png 1024w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/image-5-300x151.png 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/image-5-768x386.png 768w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/image-5.png 1103w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">スクレイピング練習場</figcaption></figure>
</div>


<p class="is-style-bg_stripe wp-block-paragraph">今回作成する<strong>スクレイピングを実行するための基本的なソースコード</strong>は以下のとおりです。<br>※<code class="file_name">scrap.php</code>というファイルを新規に作成しています。</p>



<h3 class="wp-block-heading"><strong>【ソースコード】スクレイピングを実行する</strong></h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="scrap.php" data-lang="PHP"><code>&lt;?php 

// Composerでインストールしたパッケージを読み込む
require_once __DIR__ . &#39;/vendor/autoload.php&#39;;

use DOMWrap\Document;
use GuzzleHttp\Client;

// スクレイピング対象のURL
$url = &#39;https://scraping-training.vercel.app/site?postCount=20&title=%E3%81%93%E3%82%8C%E3%81%AF{no}%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%99&dateFormat=YYYY-MM-DD&isTime=true&timeFormat=&isImage=true&interval=360&isAgo=true&countPerPage=2&page=1&robots=true&&#39;;

// URLを元にページ内のHTML構造を取得
$client = new Client;
$response = $client-&gt;get( $url );
$html     = (string) $response-&gt;getBody();
$doc      = new Document;
$node     = $doc-&gt;html( $html );

// スクレイピングを実行
// １つ目の記事の「タイトル」と「投稿日時」を取得
$title     = $node-&gt;find( &#39;article:nth-child(1) .post-title&#39; )-&gt;text();
$post_date = $node-&gt;find( &#39;article:nth-child(1) time&#39; )-&gt;text(); 

// スクレイピングした情報を出力
echo &#39;投稿タイトル：&#39; . $title . &#39;&lt;br /&gt;&#39;;
echo &#39;投稿日時：&#39; . $post_date;

?&gt;</code></pre></div>



<p class="is-style-icon_good wp-block-paragraph">上記のソースコードを記述した上で、<code class="file_name">scrap.php</code>ファイルへアクセスすると、スクレイピングが実行されてその結果がブラウザ上に表示されます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以下より<strong>ソースコードの解説</strong>をしていきます！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">解説</h3>



<p class="is-style-balloon_box2 u-mb-ctrl u-mb-10 wp-block-paragraph">① パッケージを読み込む</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// Composerでインストールしたパッケージを読み込む
require_once __DIR__ . &#39;/vendor/autoload.php&#39;;</code></pre></div>



<p class="is-style-big_icon_check wp-block-paragraph">ここではComposerの機能のひとつ「<strong>オートロード</strong>」を利用しています。<br>本来ならパッケージごとにrequireを記述する必要がありますが、「オートロード」を利用することで、上記の<strong>１行だけでComposerでインストールしたパッケージをファイルへ読み込むことが可能</strong>です。</p>



<p class="is-style-balloon_box2 u-mb-ctrl u-mb-10 wp-block-paragraph">② パッケージのクラスを使用できるようにする</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>use DOMWrap\Document;
use GuzzleHttp\Client;</code></pre></div>



<p class="is-style-balloon_box2 u-mb-ctrl u-mb-10 wp-block-paragraph">③ スクレイピングしたいページのURLを記述</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// スクレイピング対象のURL
$url = &#39;https://　～省略～　&#39;;</code></pre></div>



<p class="is-style-balloon_box2 u-mb-ctrl u-mb-10 wp-block-paragraph">④ URL先のドキュメントをダウンロード　→　パース（構文解析）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// URLを元にページ内のHTML構造を取得
$client = new Client;
$response = $client-&gt;get( $url );
$html     = (string) $response-&gt;getBody();
$doc      = new Document;
$node     = $doc-&gt;html( $html );</code></pre></div>



<p class="is-style-balloon_box2 u-mb-ctrl u-mb-10 wp-block-paragraph">⑤ CSSセレクターを指定することで欲しい情報を取得</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// スクレイピングを実行
// １つ目の記事の「タイトル」と「投稿日時」を取得
$title     = $node-&gt;find( &#39;article:nth-child(1) .post-title&#39; )-&gt;text();
$post_date = $node-&gt;find( &#39;article:nth-child(1) time&#39; )-&gt;text(); </code></pre></div>



<div class="wp-block-group is-style-big_icon_good"><div class="wp-block-group__inner-container">
<p class="is-style-icon_pen wp-block-paragraph">このように、<strong><span class="swl-marker mark_yellow">スクレイピングでは欲しい情報のCSSセレクターを指定</span></strong>します。</p>



<p class="wp-block-paragraph">※今回は例として「１ページにある１つ目の記事の『タイトル』と『投稿日時』」を取得しています。</p>


<div class="wp-block-image is-style-shadow u-mb-ctrl u-mb-20">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="791" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package06-1024x791.jpg" alt="スクレイピング実行結果" class="wp-image-10348" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package06-1024x791.jpg 1024w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package06-300x232.jpg 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package06-768x593.jpg 768w, https://kekenta-it-blog.com/wp-content/uploads/2024/08/php-scparing-use-package06.jpg 1101w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">スクレイピング実行結果</figcaption></figure>
</div>


<p class="is-style-balloon_box2 u-mb-ctrl u-mb-20 wp-block-paragraph"><strong>CSSセレクターの確認方法がご不明</strong>な方におすすめの記事</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__css-veri-g-tool__782-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/css-veri-g-tool/">検証ツールでCSSの反映状況を確認して対処する方法【デベロッパーツール】</a>
						<span class="p-blogCard__excerpt">今回は Google chromeの検証ツールを使用してCSSの反映状況を確認する方法+CSSが反映されていないときの対処方法 について解説をします。 なお、CSSが反映されない原因&#8230;</span>					</div>
				</div>
			</div>
		</div></div></div>



<p class="is-style-balloon_box2 u-mb-ctrl u-mb-10 wp-block-paragraph">⑥ スクレイピングした情報をブラウザに出力</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// スクレイピングした情報を出力
echo &#39;投稿タイトル：&#39; . $title . &#39;&lt;br /&gt;&#39;;
echo &#39;投稿日時：&#39; . $post_date;</code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以上が<strong>スクレイピングのもっとも基本的なソースコード</strong>です！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">これをベースとし、あとは</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>すべてのページの全記事の情報を取得する</li>



<li>取得した情報をデータベースへ保存する</li>
</ul>



<p class="wp-block-paragraph">などの実装ができれば、スクレイピングの基礎は身につけたと言えるのではないでしょうか。</p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">【発展編】スクレイピングの基本コードをベースに実践的な実装に挑戦！</h2>



<p class="is-style-bg_stripe wp-block-paragraph">ここからはスクレイピングの基本的なソースコードを改変した、<strong>より発展的なソースコード</strong>をご紹介します。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>おおよその流れはお伝えしますが、<strong>細かい部分についてはあえて解説を割愛</strong>させていただきます。<br>まずはぜひ<strong>ご自身で実装に挑戦していただき、その答え合わせとしてご活用</strong>していただければと思います！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">【発展①】サイト内すべての記事情報をスクレイピングする</h3>



<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsLightbulb" data-id="0" aria-hidden="true" class="swl-inline-icon">  <strong>実装のポイント</strong></span></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li><strong>全ページ数</strong>を取得する必要がある</li>



<li><strong>各ページ内の記事数</strong>を取得する必要がある</li>



<li><strong>記事の並び順に合わせたCSSセレクター</strong>を指定する必要がある</li>



<li>ページ番号が変わる＝<strong>URLが変わる</strong>（どんな法則で変わるのか？を知り、その性質を利用する）</li>



<li>（本番サイトを想定して）<strong>スクレイピングの実行間隔をあける</strong></li>
</ul>
</div></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="scrap.php" data-lang="PHP"><code>&lt;?php 

require_once __DIR__ . &#39;/vendor/autoload.php&#39;;

use DOMWrap\Document;
use GuzzleHttp\Client;

// 最後のページ番号
$last_page_num = getLastPageNum();

$client = new Client;

// ページごとの記事情報をスクレイピング
for( $i=1; $i&lt;=$last_page_num; $i++ ){

    // スクレイピング対象のURL
    $url = &#39;https://scraping-training.vercel.app/site?postCount=20&title=%E3%81%93%E3%82%8C%E3%81%AF{no}%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%99&dateFormat=YYYY-MM-DD&isTime=true&timeFormat=&isImage=true&interval=360&isAgo=true&countPerPage=2&page=&#39;. $i .&#39;&robots=true&&#39;;

    // URLを元にページ内のHTML構造を取得
    $response = $client-&gt;get( $url );
    $html     = (string) $response-&gt;getBody();
    $doc      = new Document;
    $node     = $doc-&gt;html( $html );

    // ページ内の記事数
    $article_num  = getArticleNum( $node );

    // セレクター
    $selectors = setSelectors( $article_num );

    // スクレイピングを実行
    // 現在のページ内の記事の「タイトル」と「投稿日時」を取得
    foreach( $selectors as $selector ){
        $title     = $node-&gt;find( $selector[&#39;title&#39;] )-&gt;text();
        $post_date = $node-&gt;find( $selector[&#39;post_date&#39;] )-&gt;text(); 

        // スクレイピングした情報を出力
        echo &#39;投稿タイトル：&#39; . $title . &#39;&lt;br /&gt;&#39;;
        echo &#39;投稿日時：&#39; . $post_date . &#39;&lt;br /&gt;&#39;;
        echo &#39;-----------------&lt;br /&gt;&#39;;

        // 待機時間
        sleep(3);
    }
}


/***********************************/
/* 関数定義 */
/***********************************/

/**
 * 最後のページを取得する
 */
function getLastPageNum()
{
    $client = new Client;

    // 取得情報
    $url = &#39;https://scraping-training.vercel.app/site?postCount=20&title=%E3%81%93%E3%82%8C%E3%81%AF{no}%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%99&dateFormat=YYYY-MM-DD&isTime=true&timeFormat=&isImage=true&interval=360&isAgo=true&countPerPage=2&page=1&robots=true&&#39;;

    // セレクター
    $last_page_selector = &#39;.pagination &gt; a:nth-last-child(2) &gt; span&#39;;

    // レスポンス
    $response = $client-&gt;get( $url );
    $html     = (string) $response-&gt;getBody();
    $doc      = new Document;
    $node     = $doc-&gt;html( $html );

    // 取得情報
    $last_page_num = $node-&gt;find( $last_page_selector )-&gt;text();

    return $last_page_num;
}

/**
 * ページ内の記事数を取得
 */
function getArticleNum( $doc )
{
    $article_node = $doc-&gt;find( &#39;article&#39; );
    return $article_node-&gt;count();
}

/**
 * ページ内の記事情報を取得するためのセレクターをセット
 */
function setSelectors( $article_num )
{
    $selectors = array();
    for( $j=1; $j&lt;=$article_num; $j++ ){
        $selectors[] = [
            &#39;title&#39;     =&gt; &#39;article:nth-child(&#39; . $j . &#39;) .post-title&#39;,
            &#39;post_date&#39; =&gt; &#39;article:nth-child(&#39; . $j . &#39;) time&#39;,
        ];
    }
    return $selectors;
}

/***********************************/

?&gt;
</code></pre></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">【発展②】スクレイピングした情報をデータベースに保存する</h3>



<p class="is-style-bg_stripe wp-block-paragraph">この【発展②】は、<strong>【発展①】にデータベースへの保存機能を取り付けたもの</strong>です。<br>そのため、まずは【発展①】の理屈をきちんと理解してから挑戦することをおすすめします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="scrap.php" data-lang="PHP"><code>&lt;?php 

require_once __DIR__ . &#39;/vendor/autoload.php&#39;;

use DOMWrap\Document;
use GuzzleHttp\Client;

/**
 * DB接続情報
 */
const DB_HOST     = &#39;mysql:dbname=scraping;host=127.0.0.1;charset=utf8&#39;;
const DB_USER     = &#39;kekenta&#39;;
const DB_PASSWORD = &#39;kekenta_pass&#39;;

/**
 * 取得情報をデータベースに格納する
 * データベース接続処理
 */
try {
    $pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD, [
        PDO::ATTR_ERRMODE          =&gt; PDO::ERRMODE_EXCEPTION, 
        PDO::ATTR_EMULATE_PREPARES =&gt; false,
    ]);
    $sql = (&#39;
        INSERT INTO
            scraping_practice01(title, post_date)
        VALUES
            (:TITLE, :POST_DATE)
    &#39;);
    $stmt = $pdo-&gt;prepare($sql);
} catch (PDOException $e) {
    echo &#39;接続失敗&#39; . $e-&gt;getMessage();
    exit();
}

// 最後のページ番号
$last_page_num = getLastPageNum();

$client = new Client;
for( $i=1; $i&lt;=$last_page_num; $i++ ){

    // スクレイピング対象のURL
    $url = &#39;https://scraping-training.vercel.app/site?postCount=20&title=%E3%81%93%E3%82%8C%E3%81%AF{no}%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%99&dateFormat=YYYY-MM-DD&isTime=true&timeFormat=&isImage=true&interval=360&isAgo=true&countPerPage=2&page=&#39;. $i .&#39;&robots=true&&#39;;

    // URLを元にページ内のHTML構造を取得
    $response = $client-&gt;get( $url );
    $html     = (string) $response-&gt;getBody();
    $doc      = new Document;
    $node     = $doc-&gt;html( $html );

    // ページ内の記事数
    $article_num  = getArticleNum( $node );

    // セレクター
    $selectors = setSelectors( $article_num );

    // スクレイピングを実行
    // 現在のページ内の記事の「タイトル」と「投稿日時」を取得
    foreach( $selectors as $selector ){
        $title     = $node-&gt;find( $selector[&#39;title&#39;] )-&gt;text();
        $post_date = $node-&gt;find( $selector[&#39;post_date&#39;] )-&gt;text(); 
        $post_date = changeTimeToToday($post_date);

        // 取得情報をデータベースに格納する
        $stmt-&gt;bindValue(&#39;:TITLE&#39;    , $title    , PDO::PARAM_STR);
        $stmt-&gt;bindValue(&#39;:POST_DATE&#39;, $post_date, PDO::PARAM_STR);
        $stmt-&gt;execute();

        // 待機時間
        sleep(3);
    }
}

// DBとの接続を切る
$pdo = null;
$stmt = null;


/***********************************/
/* 関数定義 */
/***********************************/

/**
 * 最後のページを取得する
 */
function getLastPageNum()
{
    $client = new Client;

    // 取得情報
    $url = &#39;https://scraping-training.vercel.app/site?postCount=20&title=%E3%81%93%E3%82%8C%E3%81%AF{no}%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%99&dateFormat=YYYY-MM-DD&isTime=true&timeFormat=&isImage=true&interval=360&isAgo=true&countPerPage=2&page=1&robots=true&&#39;;

    // セレクター
    $last_page_selector = &#39;.pagination &gt; a:nth-last-child(2) &gt; span&#39;;

    // レスポンス
    $response = $client-&gt;get( $url );
    $html     = (string) $response-&gt;getBody();
    $doc      = new Document;
    $node     = $doc-&gt;html( $html );

    // 取得情報
    $last_page_num = $node-&gt;find( $last_page_selector )-&gt;text();

    return $last_page_num;
}

/**
 * ページ内の記事数を取得
 */
function getArticleNum( $doc )
{
    $article_node = $doc-&gt;find( &#39;article&#39; );
    return $article_node-&gt;count();
}

/**
 * ページ内の記事情報を取得するためのセレクターをセット
 */
function setSelectors( $article_num )
{
    $selectors = array();
    for( $j=1; $j&lt;=$article_num; $j++ ){
        $selectors[] = [
            &#39;title&#39;     =&gt; &#39;article:nth-child(&#39; . $j . &#39;) .post-title&#39;,
            &#39;post_date&#39; =&gt; &#39;article:nth-child(&#39; . $j . &#39;) time&#39;,
        ];
    }
    return $selectors;
}

/**
 * 今日の投稿なら$post_dateに「今日の日付」をセットする
 */
function changeTimeToToday( $post_date )
{
    if( strpos($post_date,(string)&#39;前&#39;) !== false ){
        $post_date = date(&quot;Y-m-d&quot;);
    }
    return $post_date;
}

/***********************************/

?&gt;
</code></pre></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">いかがだったでしょうか。</p>



<p class="wp-block-paragraph">PHPでスクレイピングをする方法はいくつかありますが、今回は２つのパッケージを組み合わせる方法を採用してみました。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>この記事で使用したライブラリパッケージ</span></div><div class="cap_box_content">
<ul class="wp-block-list -list-under-dashed is-style-num_circle">
<li>Guzzle</li>



<li>PHP DOM Wrapper</li>
</ul>
</div></div>



<p class="wp-block-paragraph">スクレイピングをするための最低限のソースコードの型はほとんど決まっています。</p>



<p class="wp-block-paragraph">しかし、サイトに合わせて自由に情報を取得するとなった場合、<strong><span class="swl-marker mark_yellow">サイトの構造を理解し、それに合わせたソースコードを記述する</span></strong>必要があります。</p>



<p class="wp-block-paragraph">スクレイピングを実装するのが難しいと感じるとしたら、大多数はこの部分に対してなのではないかと思います。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>スクレイピングに慣れるまでは、この記事でご紹介した<a href="https://scraping-training.vercel.app/">スクレイピング練習場</a>を利用するのもオススメです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">そうすれば、うっかりどこかのサイトへ過負荷をかけて迷惑をかけてしまう（最悪法的な処置を取られてしまう）ということもありません。</p>



<p class="wp-block-paragraph">この記事をご参考に、ぜひPHPでスクレイピングに挑戦してみてください！</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/08/eye-catch__composer-how-to__9871-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/composer-how-to/">【初心者向け】Composerの使い方を丁寧に解説！【PHP】</a>
						<span class="p-blogCard__excerpt">Composerってよく見かけるけど、イマイチ使い方がわからないな…… 今回はこうしたお悩みをお持ちの方へ向けて PHPのWebアプリ開発にComposerを導入してパッケージライブ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p class="is-style-balloon_box2 wp-block-paragraph">Webアプリ開発に興味がある方におすすめの記事</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/eye-catch__board-app-php__2739-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/board-app-php/">掲示板アプリの作り方｜プログラミング初心者向け【PHP】</a>
						<span class="p-blogCard__excerpt">この記事ではPHPによる 掲示板アプリの作り方 をご紹介します。 掲示板アプリを作成するためには、PHPの基本文法をはじめ、データベース操作（いわゆるCRUD）やHTTPリク&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/07/eye-catch__php-login-app__9392-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/php-login-app/">【PHP】ログイン機能の仕組み・ソースコード解説｜ハッシュ値とは？</a>
						<span class="p-blogCard__excerpt">PHPでログイン機能を実装してみたいけど、いざ作ろうとすると何をどうしていいのか分からないな…… この記事ではPHPでログイン機能を実装する方法を解説します。  この記&#8230;</span>					</div>
				</div>
			</div>
		</div>]]></content:encoded>
					
					<wfw:commentRss>https://kekenta-it-blog.com/php-scraping-use-package/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
