ColabでかんたんPythonスクレイピング。365オフィス製品windowsExcelExcelに関する記事をあつめました。ScriptGoogleAppsScriptについての記事です。業務効率化アプリ・ガジェット定時に帰れるアプリ雑記ガチなシャツリライブシャツすごすぎワロタwwwwww【リライブシャツを買ってみたらガチだった。着るだけで「身体機能をサポートする」怪しいシャツがガチだった。365オフィス製品windowsExcelExcelに関する記事をあつめました。ScriptGoogleAppsScriptについての記事です。365オフィス製品windowsExcelExcelに関する記事をあつめました。ScriptGoogleAppsScriptについての記事です。ColabでかんたんPythonスクレイピング。ColabでかんたんPythonスクレイピング。Colaboratoryでスクレイピングする方法がわかる。Pythonでスクレイピングするためによく使われる3つのライブラリの概要がわかる。soupを使った静的ページのスクレイピング方法がわかる。Seleniumを使った動的ページのスクレイピング方法がわかる。Colaboratoryでスクレイピングする方法。Colaboratoryを使ってクラウド上にPython環境を簡単に用意する」という内容の記事を書きました。Colaboratoryでスクレイピングして外部のWebページの情報を取得する方法について紹介したいと思います。colaboratoryのメリットがわかる。Colaboratoryでスクレイピングするメリット端末・デバイスに縛られることなくどこからでもスクリプトを実行できる。Colaboratoryは、Googleアカウントさえあれば無料で利用できます。端末・デバイスに縛られることなくどこからでもスクリプトを実行できる。クラウド上に環境を構築するのでどのPCからアクセスしても同じ環境でPythonを実行したり・スクリプトの作成を再開したりすることができます。Sheet・Excel・csvファイルなどで出力することができます。ColaboratoryはGoogeドライブとの連携が簡単です。ドライブに出力して見易い形で表示することも簡単です。Colaboratoryでスクレイピングするデメリットスケジュールによる自動実行や、トリガー実行はできない。Colaboratoryには、定期実行やイベントを待機してトリガー実行する仕組みはありません。作成したPythonスクリプトの開始は手動で行うことになります。このため自動でスクリプトを動かしたい場合は、自分のパソコンに環境を構築するか、GCP・AWS・Azure・Herokuなどのクラウドサービスを利用する必要があります。セッションが切れるとインストールしたモジュールは削除される。Coraboratoryに自分で追加したPythonモジュールはセッションが切れると削除されます。CoraboratoryにデフォルトではインストールされていないSeleniumモジュールを使うPythonスクリプトを作成して次の日にもう一度実行しようとするとき、再びSeleniumのインストールが必要です。いえ、ColabファイルにSeleniumインストールコマンドの記述を残しておけばそれを実行するだけなので大きな手間ではないかなと思います。Pythonでスクレイピングするためのライブラリは?ぽこがみさまPythonにはスクレイピングするためによく使われる3つのライブラリがあります。指定したURLに対してリクエストを投げてレスポンスを取得します。HTMLやXMLを解析(パース)してデータを抽出します。ブラウザの動作をエミュレートしてHTMLを取得します。動的ページと静的ページの違い動的ページと静的ページの違い。スクレイピングをするとき、Webページを静的ページと動的ページの2つに分類して語られることが多くあります。pages)Webサーバにリクエストして、ブラウザが受け取った情報を、そのままブラウザ上に表示するページです。pages)Webサーバにリクエストして、ブラウザが受け取った情報を、JavaScriptで動的に変更してから表示するページです。おJavaScriptはブラウザ上で動作するのでJavaScriptを使ったWebページのスクレイピングを正確に行うには、ブラウザの動作をエミュレートできる機能をもったライブラリが必要です。がみさまJavascriptが使われている動的ページをスクレイピングできるライブラリにはSeleniumやpyppeteerがあります。requestsrequestsは、指定したURLに対してリクエストを投げてレスポンスを取得するライブラリです。基本的でシンプルかつ高速なのでよく利用されます。HTMLをただ取得するだけでデータ抽出は得意ではありません。soupとセットでよく利用されます。ブラウザをエミュレートする機能はないため動的ページの情報を取得することはできません。soupは、HTMLやXMLを解析(パース)してデータを抽出するライブラリです。ページ情報の取得は行えないためrequestsとあわせて使われることが多いです。SeleniumSeleniumは、ブラウザの動作をエミュレートしてHTMLを取得するライブラリです。ヘッドレスブラウザ(バックグラウンドで動くブラウザ)を使うことができるので動的のページの情報を取得することができます。高機能な分、requestsと比較すると動作は遅いです。ヘッドレスブラウザを扱うことができるライブラリは他にもpyppeteerがあります。こちらも人気のライブラリです。ほとんどできることは同じなので好きなほうを選べばいいかなと思います。Soupを使う方法です。Soupは解析するためのライブラリで、HTMLの取得はできないので、HTMLの取得ができるrequestsと組み合わせて使われることが多いです。Soupを使ったスクリプトの例じょじおまずは静的ページのスクレイピングするスクリプトについて紹介します。ターゲットWebページのURLを指定します。htmlを取得します。取得したHTMLをBeautifulSoupを使ってパースします。パースしたHTMLから特定の要素を抽出します。結果はリストで返ってきます。抽出した要素ひとつひとつから情報を取得します。(e.attrs["href"])▲簡単な静的ページのスクリプトの例です。BeautifulSoup▲requestsとbeautifulSoupをインポートします。ターゲットWebページのURLを指定します。htmlを取得します。requests.get(url)▲requests.get()を使ってHTMLを取得します。取得したHTMLをBeautifulSoupを使ってパースします。Soupを使ってHTMLのタグ名やクラス名を認識します。print(soup)▲解析したsoup変数をprint関数でみてみると、HTMLが確認できます。Soupの機能を使ってもう少し細かくデータを切り出してみたいと思います。パースしたHTMLから特定の要素を抽出します。結果はリストで返ってきます。soup.select("a")▲例として先ほど取得したHTMLからすべてのaタグ要素を取得してみたいと思います。selectメソッドの引数はCSSセレクタを渡すことができます。data-onclick="toggleSubmenu"></span></a>▲elem[0]をprintしてリストの1つ目のデータを見てみると、HTMLのaタグの要素をまるっと取得できていることがわかります。抽出した要素ひとつひとつから情報を取得します。(e.attrs["href"])▲先ほどのステップでHTMLからaタグ要素を抽出することができました。先ほどの取得したのはタグを含んだ要素なのでデータとしては扱いづらいです。Soupではもう少し細かく情報を抽出することができます。上の例はhref属性にセットされたURLを取得しています。要素から属性のバリューを抽出します。要素からテキストを抽出します。ページ内のaタグのhrefにセットされたURLの一覧を取得することができました。ドキュメントhttps://www.crummy.com/software/BeautifulSoup/bs4/doc/動的ページのスクレイピングの例(Selenium)Seleniumのスクリプトの例じょじお続いてSeleniumでスクレイピングするときの基本的なスクリプトについて解説します。がみさま下記はページ内のすべてのリンクのURLを取得するときのコードサンプルです。Driverにセットするオプションの設定。ヘッドレスモードを有効にする。sandboxモードを解除する。この記述がないとエラーになってしまう。/dev/shmパーティションの使用を禁止し、パーティションが小さすぎることによる、クラッシュを回避する。リストから要素をひとつひとつ取り出し、そこからhref属性を抽出する。ブラウザーを終了します。Colabは、Seleniumがデフォルトでインストールされていないため、スクリプトを書く前にSeleniumをインストールします。pipコマンドでインストールを行います。Colabでコマンドを実行するときは下記のようにコマンドの先頭に「!(エクスクラメーション)」をつけます。selenium▲コマンドを実行して、InstalledとかSuccessとかのそれっぽいメッセージが表示されれば成功です。STEPWebDriverのインストールSeleniumでブラウザをエミュレートさせるにはブラウザのドライバをインストールします。Chromeベースのchromium-chromedriverを使用します。Colaboratoryは、デフォルトではchromium-chromedriverがインストールされていないため下記のLinuxコマンドでインストールを行います。インストールしたらドライバファイルをわかりやすい場所/usr/binにコピーします。/usr/binSTEP必要なモジュールのインポート文の記述ここからスクリプトを書いていきます。SeleniumからwebdriverとByをインポートします。BySTEPドライバーオプションの作成ドライバを実行する前にドライバにセットするオプションの記述を行います。colabで実行する場合このオプションの記述がないとエラーになります。Driverにセットするオプションの設定。ヘッドレスモードを有効にする。sandboxモードを解除する。この記述がないとエラーになってしまう。/dev/shmパーティションの使用を禁止し、パーティションが小さすぎることによる、クラッシュを回避する。STEPドライバーインスタンスを生成します。webdriver.Chrome('chromedriver',options=options)webdriver.Chome()を使ってChromeドライバのインスタンスを作成します。webdriver.Chome()の引数には、「ドライバファイルのパス名」と、上で作成した「ドライバーオプション」を渡します。STEPターゲットページを開きます。URLにpostしてページ情報を取得するdriver.get(URL)driver.get(“ターゲットurl”)でターゲットページの情報を取得します。STEPページの読み込みが行われるまで待機します。Webページによっては、Ajaxの仕組みをつかってページがロードされてから画面を書き換えるといったことが行われています。書き換え後の完璧な情報を取得するために待機時間を入れて調整します。Seleniumは待機方法がいくつかありますがよく使うものを紹介します。秒数を指定して待機する方法です。指定した要素が出現するまで待機し続けます。ページに指定した要素がない場合に無限ループにならないように最大待機時間も設定します。ページ内のすべての要素が読み込まれるまで待機します。10秒たったらタイムアウトにします。要素がクリック出来る状態になるWebDriverWaitSTEP取得したHTMLをパースして目的の要素にアクセスします。タグ名で要素を取得する。driver.find_elements(By.TAG_NAME,"a")要素を取得するには、driver.find_elementsを使用します。Byクラスを使ってタグ・クラス・XPathなどを指定します。#p-postList__titleというクラス名の要素を取得します。#aタグをすべて取得します。driver.find_elements(By.CSS_SELECTOR,”p.content”)以前は”driver.find_element_by_***”または”driver.find_elements_by_***”という関数が一般的でしたが、最新バージョンのSeleniumではこのメソッドを使用すると非推奨という注意メッセージが表示されます。STEP取得した要素から文字列を取得します。driver.find_elements()で取得した要素はリストで返却されます。ひとつひとつはWebElementクラスです。WebElementクラスから情報を取得するには下記のメソッド・プロパティを使います。指定された属性または要素のプロパティを取得します。要素のテキストを取得します。href="https://www.teijitaisya.com">僕の一つ目のブログです。href="http://www.eigorou.com">僕の二つ目のブログです。--></html>▲上記のサンプルHTMLを例に解説します。要素のテキストを取得する。僕の一つ目のブログです。僕の二つ目のブログです。▲先ほどのサンプル.htmlからaタグのテキストを抽出する例です。要素のhref属性を取得する。http://www.eigorou.com▲先ほどのサンプル.htmlからaタグのhref属性のurlを抽出する例です。STEPドライバーを閉じます。ブラウザーを終了する。driver.quit()▲最後にドライバーを閉じます。この記述を忘れるとSeleniumがメモリ上に常駐し続けてコンピュータに負荷がかかるので注意してください。Driveに出力すると便利かなと思います。簡単な出力例を紹介します。colab】GoogleドライブのファイルをPythonで操作する。colaboratoryでGoogleドライブのファイルを操作してみます。colaboratoryでローカルPCのファイルを操作する方法がわかる。Driveと連携するには最初に簡単な設定が必要です。Pythonを使ったファイル操作の基本がわかる。Pythonのos、glob、pathlibの使い方がわかる。Pythonでテキストファイル操作の基本がわかる。Driveと連携する際のファイル・フォルダ操作のまとめです。PythonでExcelを操作するためによく使われるOpenPyXLライブラリの使い方がわかる。Colabからスプレッドシートに読み込み・書き出し。Colabから環境構築なしでPythonでスプレッドシートを操作する方法がわかる。スプレッドシートを操作するためのgspreadライブラリの基本...スクレイピングを行う際のターゲットページの事前分析スクレイピングを行う際は、ターゲットとするWebページのHTML構造を分析して、目的の情報がどんなHTML要素に囲まれているかを知る必要があります。HTMLの分析にはブラウザの開発者ツールの機能を使うことが一般的です。下記の記事に開発者ツールの基本的な使い方をまとめました。【スクレイピングする時はHTML構造を確認しよう。desktopを使えばWebサイトのHTML構成を全く理解していなくてもスクレイピング目的のフローを簡...スクレイピングを行う際の注意点スクレイピングを行う際はルールとモラルを守って正しく行ってください。中にはスクレイピングを禁止するWebサイト・Webサービスもありますので事前に確認してください。APIが公開されているWebサービスはスクレイピングではなくAPIを使って情報を取得した方がスマートに情報を取得できる場合が多いです。ターゲットとするWebサービスでAPIが提供されているかを確認して検討してください。Colaboratoryを使ってpythonでスクレイピングする方法についてご紹介しました。がみさまこのブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。Amazon調べ)Amazon楽天市場Yahooショッピングポチップ▲Python入門者向けの書籍です。デスクワークの業務効率化方面を中心に自動化するスクリプトを作成することができます。Excel・Word・PDF・デスクトップアプリ化・メールなどなど。身近な作業を自動化しながら学べるので事務員の方やエンジニアの方幅広くお勧めできます。リンク▲Pythonでデータ分析するのに超絶おすすめです。データ分析でよく使うPandasモジュールを中心にデータ加工から分析までの基礎を理解できます。リンク▲Pythonのお作法なんかが書かれています。Pythonを学ぶには?じょじおPythonを実践的に学ぶなら筆者も受講したデイトラがおすすめです。こんにちは、じょじお(@teijilabo)です。人気の自習型オンラインプログラミングスクール『デイトラ』に新しくPythonコースが登場しました。デイトラを5コース...デイトラPythonコースのメリットSNS(インスタ・Twitter・Youtube等)のAPIを駆使したマーケ特化のモダンなシステムを作りながら学べる。機械学習の基礎を実用的なシステムを作りながら学べる。現役エンジニアがメンター。1年間Slackで質問し放題。SlackやTwitterで受講生の発信が盛んなのでひとりでの学習でもモチベ維持しやすい。月に2~4回行われるオンラインセミナー(現役のマーケター・フリーランサー・デザイナー社長・エンジニア等のWeb界隈のすごい人達が講師)が無料で受講可能。メンターさんがとても親切でガチ中のガチな初心者でも質問しやすい環境でした。おかげ様で月間18万PV。ありがとうございます!多くの方がルーチンワークを時短できるように『ITに弱い方にも寄り添った解説』を心がけています。記事へのご質問やブログネタのご要望、何かあればお気軽に下記にどうぞ。VBAでPublisherを操作する!Excelアドインをショートカットと右クリックメニューから呼び出す。本を読み放題で読む方法。desktop関連書籍を全部読んだ管理人が、初心者の方の最初の一冊にオススメする本です。