自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/VBA/GAS/JavaScript/Raspberry Piなどで色んなことを自動化

Webスクレイピングの必須知識 利用規約やrobots.txtの確認方法 Webスクレイピング超入門④

Webスクレイピング超入門シリーズ④の題材は「そのサイトってスクレイピングしていいんだっけ」です。 過去3回ではスプレッドシートやGASを使ってお手軽にWebサイトのデータを自動取得する方法を紹介しました。

  1. Webページデータ取得: 初心者向けWebスクレイピング手法
  2. 国民の祝日データを文字化け回避
  3. Webスクレイピングの必須知識「XPath」のチートシート

が、自動取得できることと自動取得してOKかどうかは別でして、どうやってスクレイピングOK/NGを確認すれば良いのか という話。

端的に言えばタイトルのとおり「利用規約」「robots.txt」を確認することになりますが、その見方を紹介します。

  • スクレイピングとは?
  • スクレイピングして良いサイトとダメなサイトの見分け方
    • 1. 利用規約を確認する
    • 2. robots.txtを確認する
  • robots.txtの構造
  • robots.txtの設定例
    • 1. すべてのクローラーに対して全ページを許可
    • 2. すべてのクローラーに対して全ページを禁止
    • 3. 特定のディレクトリを禁止
    • 4. 特定のページを禁止
    • 5. 特定のクローラーを禁止
    • 6. 特定のクローラーを許可
    • 7. 特定のディレクトリを許可
    • 8. 特定のファイルタイプを禁止
  • 日本の法律や海外の規制について
    • 1. 著作権法
    • 2. 不正アクセス禁止法
    • 3. 海外の規制
  • まとめ
続きを読む

Windows Sandboxをよく使うならwsbファイルでいろいろ設定しておくと楽

以前にも書いた超お手軽に使い捨て仮想マシンを立ち上げられるWindows Sandbox。

codelife.cafe

最近ではかなり進化していて、ホストOSとのフォルダ共有やログオンスクリプトなどの設定をあらかじめ定義しておける.wsbファイルなるものがある。 メモ帳とかで構成を定義して sandbox.wsb のような名前で保存。ダブルクリックで実行するとWindows Sandboxが立ち上がる。

ただのXMLファイルといえばそうだけど書き方メモっておかないと忘れるので書いておく。

続きを読む

Webスクレイピングの必須知識「XPath」のチートシート Webスクレイピング超入門③

Webスクレイピング超入門① で紹介した IMPORTXML 関数でXPathを開発者ツールによって自動取得する方法がありました。

codelife.cafe

ただ、この方法にはいくつかの欠点があります。 HTML構造の変更に弱く n 番目の tr などの指定では上に一つ tr が追加されたら全て1つズレる、XPathの表記が長すぎてあとから人間が理解しづらいなど。 これらの対策として、できれば「XPathを理解して自分で指定する」のがベストかと思います。(ChatGPTに相談するというのもアリかもしれません)

ということで、XPathの使い方チートシートを置いておくので参考にしつつ開発者ツールの検索機能でいい感じに指定できてるかチェックしてみましょう。

構文 説明 結果
/ ルートノードからの絶対パス /html/body ルートノードからhtml、その子のbodyを選択
// 現在の位置から全ての子孫ノードを検索 //div ドキュメント内の全てのdivノードを選択
. 現在のノードを指す ./title 現在のノードの子のtitleノードを選択
.. 親ノードを指す ../div 現在のノードの親のdivノードを選択
@attribute 属性値を取得 //a/@href 全てのaタグのhref属性を取得
* 任意のタグを指定 //div/* 全てのdivの直下の子ノードを選択
[条件] 条件に一致するノードを選択 //li[@class='active'] class="active"liタグを選択
[n] n番目のノードを選択 //ul/li[1] 最初のliノードを選択
last() 最後のノードを選択 //ul/li[last()] 最後のliノードを選択
contains() 部分一致 //a[contains(@href, 'example')] href属性にexampleを含むaタグを選択
text() ノードのテキストを取得 //p/text() 全てのpタグのテキストを取得
starts-with() 文字列が特定の値で始まるノードを選択 //a[starts-with(@href, 'https')] href属性がhttpsで始まるaタグを選択
not() 条件が一致しないノードを選択 //div[not(@id)] id属性を持たないdivタグを選択
| 異なる複数のノードを同時に選択 //h1 | //h2 h1タグとh2タグを選択
@* 全ての属性を選択 //img/@* 全てのimgタグの属性を選択
ancestor:: 特定の祖先ノードを選択 //li/ancestor::ul liタグの祖先にあるulタグを選択
descendant:: 特定の子孫ノードを選択 //div/descendant::p divタグの子孫である全てのpタグを選択
following-sibling:: 特定の後続の兄弟ノードを選択 //h2/following-sibling::p h2タグの後に続く全ての兄弟pタグを選択
preceding-sibling:: 特定の前の兄弟ノードを選択 //h2/preceding-sibling::p h2タグの前にある全ての兄弟pタグを選択
続きを読む

日本の祝日CSVをスプレッドシートに自動読み込みするGAS関数(文字化け回避)Webスクレイピング超入門②

前回、内閣府の提供する祝日一覧CSVデータ(国民の祝日について - 内閣府)を =IMPORTDATA("https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv") で読み込もうとしましたが文字化けしてしまって使い物になりませんでした。

codelife.cafe

今回はGASを用いることで文字化けを回避し、スプレッドシート上に祝日一覧データを自動取得できるようにしてみます。

いつもどおり細かいことはさておき実際のスプレッドシートを見たいという方はこちらのシートをコピーしてお試しください。

Shift_JISのCSVデータをインポートするGAS関数 - Google スプレッドシート

完成形は↓のようなイメージです。

オリジナルの関数 importCsv

続きを読む

Googleスプレッドシート関数でWebスクレイピング超入門①

Webスクレイピング。

Webページから欲しいデータを抽出する仕組みのことです。 調べ物を定期的に行いたい もしくは 大量に行いたい場合には自動でデータを収集させて手作業を削減したいですよね。

これにはいろいろなやり方があります。 RPA(UiPathやPowerAutomateDesktop)、プログラミング(SeleniumやPlaywrightやBeautifulSoupやChrome DevTools Protocol)、その他専用ツールなどなど。

しかし、いずれも初心者には少々ハードルの高いもの。 そこでWebスクレイピングの超入門的なやり方としてGoogleスプレッドシート関数を使った方法を紹介します。

細かいことは良いから実際のスプレッドシートを見たいという方はこちらのシートをコピーしてお試しください。

スプレッドシート関数で始めるWebスクレイピング - Google スプレッドシート

スプレッドシートで使えるWebスクレイピング関数

  • Level① IMPORTFEED関数 でQiitaのトレンド記事を取得する
    • IMPORTFEED関数の引数
  • Level② IMPORTHTML関数 でYahoo天気の週間予報を取得する
    • IMPORTHTML関数の引数
  • Level③ IMPORTXML関数 でいい感じにYahoo天気の週間予報を取得する
    • XPathで取りたい要素が選択できているか確認するには
    • IMPORTXML関数の引数
  • Level④ IMPORTDATA関数 で祝日一覧CSVを取得したい
    • 現状はGASで自作するしかない
続きを読む