tag:crieit.net,2005:https://crieit.net/tags/Selenium/feed 「Selenium」の記事 - Crieit Crieitでタグ「Selenium」に投稿された最近の記事 2023-07-31T23:48:38+09:00 https://crieit.net/tags/Selenium/feed tag:crieit.net,2005:PublicArticle/18545 2023-07-29T23:01:28+09:00 2023-07-31T23:48:38+09:00 https://crieit.net/posts/fix-chromedriver-v115-distribution-change 【Ruby/Selenium】v115からChromeDriverの配布元が変わったようなので対応した話 <p>こんにちは、しきゆらです。<br /> 数年ごとに時たま書いているSeleniumネタ、 今回は久々に大きく動かなくなったので調べつつ対応した記録を残しておきます。</p> <h2 id="webdriversが動かなくなった"><a href="#webdrivers%E3%81%8C%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F">webdriversが動かなくなった</a></h2> <p>これまでは<code>webdrivers</code>というgemを使い、インストールされているChromeのバージョンにあったChromeDriver良しなに取得するようにしていました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/titusfortner/webdrivers">GitHub - titusfortner/webdrivers: Keep your Selenium WebDrivers updated automatically</a></p> <p>さっくり<code>webdrivers</code>の中身を見てみましたが、インストールしているChromeのバージョンを確認し、必要なDriverがなければ以下のサイトから該当バージョンのものを取得・配置するようです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://chromedriver.storage.googleapis.com/"></a></p> <p>「https://chromedriver.storage.googleapis.com/LATEST_RELEASE_114」のようにChromeのバージョン値を指定するとその最新版となるChromeDriverのバージョンを取得できるので、これをもとに取得する感じでした。</p> <p>ところが、先日Seleniumを動かしたらChromeDriverがない、とエラーが出て動かなくなっていました。<br /> 何事かと思って調べてみました。</p> <h3 id="ChromeDriverの配布先が変わった"><a href="#ChromeDriver%E3%81%AE%E9%85%8D%E5%B8%83%E5%85%88%E3%81%8C%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%9F">ChromeDriverの配布先が変わった</a></h3> <p>ChromeDriverのサイトを見てみると、配布先が変更されたようです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://chromedriver.chromium.org/downloads">ChromeDriver - WebDriver for Chrome - Downloads</a></p> <blockquote> <p><strong>Latest ChromeDriver Binaries</strong></p> <ul> <li>Starting with M115 the latest Chrome + ChromeDriver releases per release channel (Stable, Beta, Dev, Canary) are available at <a target="_blank" rel="nofollow noopener" href="https://googlechromelabs.github.io/chrome-for-testing/">the Chrome for Testing availability dashboard</a>. For automated version downloading one can use the convenient <a target="_blank" rel="nofollow noopener" href="https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json">JSON endpoints</a>.</li> <li>The older releases can be found at the <a target="_blank" rel="nofollow noopener" href="https://chromedriver.chromium.org/downloads">Downloads</a> page.</li> </ul> </blockquote> <p>ということで<code>webdrivers</code>が参照していたサイトとは別のところで配布するようになったようです。</p> <p>ついでに調べていると、Chrome for Testingなるものが出てきました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://developer.chrome.com/blog/chrome-for-testing/">Chrome for Testing: reliable downloads for browser automation - Chrome Developers</a></p> <p>以前も何かのタイミングでちらっと見た気がするんですが、あまり詳しく見てはいなかったので今回読んでみました。</p> <p>どうやら、Chromeは自動更新なので開発者はテストをするタイミングによって意図しないバージョンになっていたりしてつらい、そうだテスト用に自動更新がないChromeを作ろう、ということのようです。</p> <p>ということでテスト用Chromeとそのバージョン向けのChromeDriverが以下のサイトで一緒に配布されるようになっていました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://googlechromelabs.github.io/chrome-for-testing/#stable">Chrome for Testing availability</a></p> <p>自前でChromeDriverを取得するスクリプトを組んでいる場合は、この辺の対応が必要になりそう。</p> <h2 id="対応方法"><a href="#%E5%AF%BE%E5%BF%9C%E6%96%B9%E6%B3%95">対応方法</a></h2> <h3 id="暫定対応"><a href="#%E6%9A%AB%E5%AE%9A%E5%AF%BE%E5%BF%9C">暫定対応</a></h3> <p><code>webdrivers</code>でも対応するPRが上がってますが、記載時点(2023/07/29)ではまだマージされてません。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/titusfortner/webdrivers/pull/249">Fixed Webdrivers::VersionError with chrome version greater than 115 by sadahiro-ono · Pull Request #249 · titusfortner/webdrivers</a></p> <p>こちらのissueで対応方法が記載されていました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/titusfortner/webdrivers/issues/247">Webdrivers trying to load a Chrome version that doesn't exist · Issue #247 · titusfortner/webdrivers</a></p> <p>現在はv114向けのChromeDriverでも動くようなので、コード内でChromeDriverのバージョンを決め打ちすることでその場しのぎをすることができます。<br /> ただ、これもこのバージョンで動作しなくなるのは時間の問題なのでいつまで使えるかは不明です。</p> <pre><code class="ruby">Webdrivers::Chromedriver.required_version = "114.0.5735.90" </code></pre> <h3 id="Selenium Manager"><a href="#Selenium+Manager">Selenium Manager</a></h3> <p>issueを見ていくと、Selenium Managerなるものが出てきました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.selenium.dev/documentation/selenium_manager/">Selenium Manager (Beta)</a></p> <p>まだBetaのようですが、Selenium自体に含まれる各WebDriverの取得などをしてくれるツールのようです。</p> <p>これまでは、手動で配布サイトから取得したり上記<code>webdrivers</code>のような別ツールでWebDriverを取得して使う必要がありましたが、Selenium Managerを使えば外部ツールを使わずにSeleniumだけで完結するようになりますね。</p> <p>使い方も、以下の3点を満たしていれば勝手に動いてくれるようです。</p> <ul> <li><code>Service</code>クラスでWebDriverのパスを指定していない</li> <li><code>webdrivers</code>のような外部のWebDriver管理ツールを使っていない</li> <li>環境変数<code>PATH</code>の中にWebDriverがない</li> </ul> <p>ということで、<code>webdrivers</code>が動かないのでこっちを使ってみることにしました。</p> <p>ここでは、タイトルの通りRuby環境である前提で記載しますが<br /> <code>selenium-webdriver</code>のgemを最新にしたうえで、上記3点を満たすように環境を整えるだけで勝手に使えるようになります。</p> <p>なお、<code>selenium-webdriver</code>のCHANGELOGを見てみると、4.6.0のころからSelenium Managerへ対応が入っているようです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES"></a></p> <p>手元では、<code>webdrivers</code>のみしか使っていないのでこれを削除するだけで利用できました。</p> <p><code>webdrivers</code>がない状態でSeleniumを使ってブラウザを立ち上げようとするとターミナル上に以下のように記載されてChromeが立ち上がるようになりました。</p> <pre><code class="ruby">2023-07-29 20:53:08 WARN Selenium applicable driver not found; attempting to install with Selenium Manager </code></pre> <p>Selenium Managerが良しなに動いてくれているようです。</p> <p>これで、対応はおしまいです。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>今回はSeleniumを使っていたらChromeDriverを取得できずに死んでしまったので、原因を調べつつ対応してみました。</p> <p>結果としては、外部ツールに頼ることなくSeleniumが擁してくれているSelenium Managerを使うことで無事動くようになりました。</p> <p>今回は、ここまで。</p> <p>おわり</p> しきゆら tag:crieit.net,2005:PublicArticle/17439 2021-06-25T03:57:06+09:00 2021-06-25T08:38:02+09:00 https://crieit.net/posts/puppeteer puppeteer でファイルをダウンロードするときに、任意のパスと名前で保存する <p><a target="_blank" rel="nofollow noopener" href="https://pptr.dev/">Puppeteer</a> を使ってファイルをダウンロードする際に、任意のパスと名前で保存したい。</p> <p>残念ながら、 現時点ではシンプルな方法は提供されていないようだ。<br /> 以下の Issue で何年にもわたって議論されているものの、 <strong>「コレ!」</strong> という解決方法は無さそう。<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/puppeteer/puppeteer/issues/299">Question: How do I get puppeteer to download a file? · Issue #299 · puppeteer/puppeteer</a></p> <p>しかし、 この Issue の <a target="_blank" rel="nofollow noopener" href="https://github.com/puppeteer/puppeteer/issues/299#issuecomment-668087154">#issuecomment-668087154</a> のコメントで、 なかなか泥臭い方法で実現するヒントが書かれていた。<br /> これを参考にして、任意のパスと名前でダウンロードファイルを保存してみよう。</p> <h2 id="実行方法"><a href="#%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95">実行方法</a></h2> <p>あらかじめ、 <a target="_blank" rel="nofollow noopener" href="https://www.npmjs.com/package/puppeteer">puppeteer</a> の npm パッケージをローカルにインストールしておく。</p> <pre><code class="console">npm install puppeteer --save </code></pre> <p>その状態で、後述の .js ファイルを nodejs で実行すれば OK だ。</p> <pre><code class="console">node puppeteer-download-with-specify-name.js </code></pre> <h2 id="コードと解説"><a href="#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A8%E8%A7%A3%E8%AA%AC">コードと解説</a></h2> <gist src="https://gist.github.com/advanceboy/557a7690e1b584d11f38ff86434aef65.js"></gist> <p>何をしているのかというと、 GitHub 上の <a target="_blank" rel="nofollow noopener" href="https://www.npmjs.com/package/puppeteer">puppeteer</a> のソースコード ZIP ファイルをダウンロードする際に、 <a target="_blank" rel="nofollow noopener" href="https://chromedevtools.github.io/devtools-protocol/">Chrome DevTools Protocol</a> を直叩きして、 任意のパスとファイル名で保存している。</p> <p>具体的なポイントは、主に 以下の 2点。</p> <ul> <li><code>Page.setDownloadBehavior</code> メソッドで、 ファイルのダウンロードの許可とダウンロード先のディレクトリを指定</li> <li><code>Fetch.enable</code> メソッドと <code>Fetch.requestPaused</code> イベントで、 ファイルダウンロードのレスポンスに <code>Content-Disposition</code> HTTP ヘッダーを無理やりねじ込む</li> </ul> <p><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Disposition"><code>Content-Disposition</code> HTTP ヘッダー</a> のドキュメントに書かれている通り、 <code>attachment</code> と <code>filename</code> ディレクティブを指定することで、 ファイルが (ブラウザ内で表示されるのではなく)ダウンロードが必要であることと、 ダウンロード時のファイル名を指定することができる。</p> <p>但し、 <code>Page.setDownloadBehavior</code> メソッドは <a target="_blank" rel="nofollow noopener" href="https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-setDownloadBehavior">実験的で且つ非推奨</a> なので、 将来にわたってサポートが続くかどうかはわからない点は、注意だ。<br /> 少なくとも、 Chromium 92.0.4512.0 (r884014) では問題なく動いている。</p> <p>ちなみに、実行する Chromium はヘッドレスモードでもヘッドフルモードでもどちらでも意図通り動くはず。</p> <hr /> <p>この方法は Chrome DevTools Protocol に思いっきり依存しているので、 Selenium など他のブラウザ自動化ツールでは同一の方法が難しく (※)、 Puppeteer ならではの方法と言える。<br /> ※: Selenium 4.x のプレリリース版を使えば、 Chrome DevTools Protocol にアクセスできるようだが、 イベントハンドラを書くのが難しそう? ドキュメントがそろってないのでまだなんとも…</p> <p>スクレイピング中にファイルをダウンロードする場合などでは、保存先のパスと名前を指定できたほうが良い気がするのだが……<br /> 今後の puppeteer や Chrome DevTools Protocol の更新でもっと簡単に実現できるようになることを期待しよう。</p> advanceboy tag:crieit.net,2005:PublicArticle/17040 2021-04-30T13:01:19+09:00 2021-05-20T18:40:12+09:00 https://crieit.net/posts/Python-Selenium-Web 【Pythonクローラー入門】SeleniumによるWebクローラーの開発 <p><a href="https://crieit.now.sh/upload_images/64b1ef6363c1052be6d7ddf2ea00ee8d608b8095e7517.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/64b1ef6363c1052be6d7ddf2ea00ee8d608b8095e7517.png?mw=700" alt="image" /></a><br /> 元記事:<a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/build-a-web-crawler-with-selenium-and-python/">https://www.octoparse.jp/blog/build-a-web-crawler-with-selenium-and-python/</a></p> <p>Webサイトから大量のデータをできるだけ早く取得する必要があるとします。それぞれのWebサイトに手動でアクセスして、コピペでデータを取得することなく、どうやって自動的にデータを取得するのでしょうか?その答えが「<a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/web-scraping/">Webスクレイピング</a>」です。Webスクレイピングに通じて、この作業を自動化にしてくれます。</p> <p>今回はPythonでWebサイトからデータをクローニングして、CSVファイルに書き込むというようなWebクローラーを実際に作成してみましょう。</p> <h1 id="一、必要なPython開発環境を導入"><a href="#%E4%B8%80%E3%80%81%E5%BF%85%E8%A6%81%E3%81%AAPython%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E5%B0%8E%E5%85%A5">一、必要なPython開発環境を導入</a></h1> <p>Pythonには、プログラムを組むために便利な標準ライブラリが数多くあります。今回は、以下のライブラリを使用しています。</p> <p>・<strong>Selenium</strong> ーー ブラウザを自動的に操作するライブラリです。主にWebアプリケーションのテストやWebスクレイピングに利用されます。<br /> ・<strong>BeautifulSoup</strong> ーー HTMLおよびXMLドキュメントを解析するためのPythonパッケージです。<br /> ・<strong>csv</strong> ーー CSVフォーマットで保存するために使用されます。</p> <p>したがって、プログラミングを実戦する前に、以下の準備が必要となります。</p> <p>・Python 2.xまたはPython 3.xの環境<br /> ・Selenium、BeautifulSoup、csvライブラリの導入<br /> ・Google Chrome ブラウザ</p> <p>それでは、早速始めましょう!</p> <h1 id="二、ページ要素(HTMLドキュメント)の検証"><a href="#%E4%BA%8C%E3%80%81%E3%83%9A%E3%83%BC%E3%82%B8%E8%A6%81%E7%B4%A0%EF%BC%88HTML%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%EF%BC%89%E3%81%AE%E6%A4%9C%E8%A8%BC">二、ページ要素(HTMLドキュメント)の検証</a></h1> <p>Webサイトから、要素(HTMLドキュメント)を検証し、データがどのように構成されているかを分析する必要があります。HTML基礎知識は<a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Learn/Getting_started_with_the_web/HTML_basics">こちらのリンク</a>で参照ください。今回はテーブルのデータを抽出するように試してみましょう。<br /> Ctrl + Shift + I を押して、テーブルの要素を指定すると、HTMLのソースコードに表示されます。<br /> <a href="https://crieit.now.sh/upload_images/12a12d2aa25da2bf82cbb073bf1f7083608b809f6da2a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/12a12d2aa25da2bf82cbb073bf1f7083608b809f6da2a.png?mw=700" alt="image" /></a></p> <p>したがって、テーブルの要素名は「table」と分かっています。<br /> なお、Webクローラーを構築するたびに、HTMLドキュメント内の要素を定位するため、xPathの知識が必要となります。xPathのチュートリアルはこちらのリンクからアクセスできます。</p> <h1 id="三、コードを書く"><a href="#%E4%B8%89%E3%80%81%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F">三、コードを書く</a></h1> <p><strong>1.まず、必要なライブラリをすべてインポートしましょう。</strong></p> <pre><code>import csv # csvモジュールをインポート from selenium import webdriver # selenium webdriver をインポート from bs4 import BeautifulSoup # BeautifulSoup をインポート </code></pre> <p><strong>2.Webdriverを使用する前に、chromedriverへのパスを設定する必要があります。</strong><br /> ※/path/to/chromedriverをWebdriverのパスに変更してください。</p> <pre><code>driver = webdriver.Chrome("/path/to/chromedriver") </code></pre> <p><strong>3.以下のコードを参照してURLを開いてください。</strong></p> <pre><code>driver.get("http://test-sites.octoparse.com/?page_id=192") </code></pre> <p><strong>4.URLを開くためのコードが書けたところで、いよいよWebサイトからデータを抽出します。</strong><br /> 先に述べたように、抽出したいデータは要素に入っています。データを持つ要素を探し出し、データを抽出します。<strong>以下のコードを参照してください。</strong></p> <pre><code>content = driver.page_source BS = BeautifulSoup(content, "html.parser") table = BS.findAll("table", {"class":"wp-block-table is-style-stripes"})[0] # テーブル"wp-block-table is-style-stripes"を指定 rows = table.findAll("tr") # テーブル中<tr>要素の内容を抽出 print(rows) # 抽出したHTMLドキュメントを検証 </code></pre> <p>最後に、web-scraping.pyで保存します。</p> <h1 id="四、コードを実行してデータを抽出する"><a href="#%E5%9B%9B%E3%80%81%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B">四、コードを実行してデータを抽出する</a></h1> <p>コードを実行して、必要なHTMLドキュメントを正しく抽出するかどうかを確認します。<br /> <a href="https://crieit.now.sh/upload_images/211873892ff67468d049cd39ce71f207608b80a981301.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/211873892ff67468d049cd39ce71f207608b80a981301.png?mw=700" alt="image" /></a></p> <h1 id="五、データを必要なフォーマットで保存"><a href="#%E4%BA%94%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%A7%E4%BF%9D%E5%AD%98">五、データを必要なフォーマットで保存</a></h1> <p>データを抽出した後、抽出したデータをCSV(Comma Separated Value)形式で保存します。そのため、コードに以下の内容を追加します。</p> <pre><code>with open("web-scraping.csv", "w", encoding='utf-8', newline=""​) as file: # ファイル名は「web-scraping.csv」を指定する writer = csv.writer(file) for row in rows: csvRow = [] for cell in row.findAll(['td', 'th']): # tdとth要素をループでファイルに書き込む csvRow.append(cell.get_text()) writer.writerow(csvRow) </code></pre> <h1 id="六、Pythonでスクレイピングしましょう"><a href="#%E5%85%AD%E3%80%81Python%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86">六、Pythonでスクレイピングしましょう</a></h1> <p>それは最終的なコードです。<br /> <a href="https://crieit.now.sh/upload_images/6d4e115c349fd675f94d3a069e648ed7608b80b39d9a9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6d4e115c349fd675f94d3a069e648ed7608b80b39d9a9.png?mw=700" alt="image" /></a></p> <p>追加した後、もう一度コード全体を実行してみてください。<br /> 抽出結果は「web-scraping.csv」というファイル名が作成され、このファイルに抽出されたデータが格納されます。<br /> <a href="https://crieit.now.sh/upload_images/7624ebafe7878a60c34a479e3962e454608b80ba7ff29.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7624ebafe7878a60c34a479e3962e454608b80ba7ff29.png?mw=700" alt="image" /></a></p> <h1 id="七、Octoparseでスクレイピングする方法"><a href="#%E4%B8%83%E3%80%81Octoparse%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95">七、Octoparseでスクレイピングする方法</a></h1> <p>プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は、スクレイピングツールの<a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/">Octoparse</a>はおすすめします。</p> <p>Octoparseは「<a target="_blank" rel="nofollow noopener" href="https://helpcenter.octoparse.jp/hc/ja/articles/360013561999-Octoparse%E3%82%92%E3%82%82%E3%81%A3%E3%81%A8%E7%9F%A5%E3%82%8B-">自動識別</a>」機能があるので、ページのURLを入力するだけで、Webページ上各項目のデータ(テキストとリンクを含む)、「次のページ」ボタン、「もっと見る」ボタン、およびページのスクロールダウンを自動的に検出し、タスク(Webクローラー)を自動的に生成することができます。</p> <p>早速ですが、Octoparseで自動化の魅力を体験してみましょう。</p> <p><strong>1.Octoparseを起動して、スクレイピングしたいWebページのURLを入力します。</strong><br /> 「抽出開始」 ボタンをクリックして進みます。<br /> <a href="https://crieit.now.sh/upload_images/761e0a72882545802c97a7319feeeef1608b80ce09f4e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/761e0a72882545802c97a7319feeeef1608b80ce09f4e.png?mw=700" alt="image" /></a></p> <p><strong>2.Octoparseでページが読み込みされたら、自動的にページ上の内容を識別します。</strong><br /> 自動識別とは、自動的にページ上の必要なデータを検出して識別するという役立つ機能です。ポイント&クリックをする必要はなく、Octoparseは自動的に処理します。<br /> <a href="https://crieit.now.sh/upload_images/2359f12975aa9a679363209c1c928c6b608b80d53c5a8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2359f12975aa9a679363209c1c928c6b608b80d53c5a8.png?mw=700" alt="image" /></a></p> <p><strong>3.識別が完了すると、データプレビューで識別したデータを表示され、確認してから「ワークフローの生成」ボタンを押します。</strong><br /> <a href="https://crieit.now.sh/upload_images/95661bba8fe25a46fc835456536461a8608b80ddddf58.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/95661bba8fe25a46fc835456536461a8608b80ddddf58.png?mw=700" alt="image" /></a></p> <p><strong>4.これで簡単にWebクローラーが作成しました!</strong><br /> 上の「実行」ボタンをクリックして、すぐデータを抽出できます。簡単ではないでしょうか。<br /> <a href="https://crieit.now.sh/upload_images/b0b0d3e60908ec44ecfc6aa732366d03608b80e4e4719.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b0b0d3e60908ec44ecfc6aa732366d03608b80e4e4719.png?mw=700" alt="image" /></a></p> <h1 id="八、まとめ"><a href="#%E5%85%AB%E3%80%81%E3%81%BE%E3%81%A8%E3%82%81">八、まとめ</a></h1> <p>Pythonでスクレイピングはそんなに簡単ではないので、学ぶ時間がなく、効率的にスクレイピングがしたい、プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は<a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/the-10-best-web-scraping-tools/">スクレイピングツール</a>はおすすめです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/?utm_source=8952&utm_medium=pic&utm_campaign=qitta"><a href="https://crieit.now.sh/upload_images/9211be13dbf84c6b98b0da0ecbffb784608b80f4e4c8b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9211be13dbf84c6b98b0da0ecbffb784608b80f4e4c8b.png?mw=700" alt="image" /></a></a></p> <p><strong>関連記事</strong><br /> <a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/creating-a-simple-web-crawler-in-php/">PHPで簡単なWebクローラーを作ってみた</a><br /> <a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/web-scraping-using-python/">PythonによるWebスクレイピングを解説</a><br /> <a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/web-scraping-using-python-vs-web-scraping-tool/">Python vs Octoparse!初心者向きのスクレイピング方法はどっち?</a><br /> <a target="_blank" rel="nofollow noopener" href="https://www.octoparse.jp/blog/intro-to-web-scraping-with-excel-vba/">【初心者向け】ExcelとVBAでWebスクレイピング実戦!</a>!</p> Octoparse Japan