LoginSignup
18
15

More than 5 years have passed since last update.

Google スプレッド シートでWebスクレイピング

Posted at

GoogleスプレッドシートでWebスクレイピングしてみた。

このBlogを参考にさせていただきました。
http://kaniku.seesaa.net/article/212479636.html
http://qiita.com/ktmg/items/d53440c913e20f8bb34c

経済レポート.comの新規記事の掲載元リンクを直接取得したいと考え作成しました。
経済レポートは非常に良いサイトなのですが、RSSで提供していただいているリンクが
全て経済レポートサイト内のページになっている為、掲載元にアクセスするのが面倒くさい
その為、スプレッドシートにタイトルと直リンクをRSSから自動取得できる様にしてみました。

手順は次の通りです。Xpathの理解が追いついてませんが、なんとか完成!

1)GoogleスプレッドシートにRSSを取り込む


=importFeed("http://www3.keizaireport.com/rss/node_1.xml")

2)RSSの記事リストから元記事のURLを取得する為、HTMLをスクレイピングします。
取得したリンクは経済レポート.comのページになる為、その中から元記事のURLリンクを取得

スクレピングにはHTMLから該当行をXpathで取得する必要がある為

の記事を参考しました。

GoogleスプレッドシートのimportXML機能で取り込むXpathを取得する為
Chromeの検証機能を活用しXpathリンクをCOPYXpathにて取得

取得箇所は次のHTML

<a href="/jump.php?RID=275091&amp;key=9096" target="_blank" class="bb">ICTで育むボランティア・レガシー:<実践>公共インフラ関連ビジネス- オリンピック・パラリンピック</a>

COPYXpathで取得されたリンクは次のものになった。


//*[@id="bk_form"]/h1/a

3)Xpathを取得し、GoogleスプレドシートのimportXMLで処理できる様に変更する。
先に取得したXpathでは、リンクとして認識しない為、Googleスプレッドシートで認識する
様に加工する。


//*[@id="bk_form"]/h1/a

加工内容は”を’へ変更する


//*[@id="bk_form"]/h1/a

↓”だとスプレッドシートで認識しない為、'へ変更する。


//*[@id='bk_form']/h1/a

4)取得したXpathが正常に取得できているかテスト
GoogleスプレッドシートのimportXMLへ入れてテストを実施
Googleスプレッドシートのセルに次の関数を入力


=importXML("http://www3.keizaireport.com/report.php/RID/275091/","//*[@id='bk_form']/h1/a")

※テストはわかりやすい様に固定リンクでテストを実施し、Xpathの取得テストをする。

▼次の文字列が取得される。
海外 経済指標予測とイベント予定(2016年5月8日~5月15日)

5)リンク先のURLを取得する為、href部分を取得する様、/@hrefをxpathの後ろに追加
@hrefをXpathの部分に追加


=importXML("http://www3.keizaireport.com/report.php/RID/275091/","//*[@id='bk_form']/h1/a/@href")

@hrefを指定すると以下のURLが取得

/jump.php?RID=275091&key=9096

なお、@の後ろをtargetにすると、_blankが表示される。

6)相対パスでURLが記載されている為、GoogleスプレッドシートのCONACTENATE関数を使いリンク先のURLを生成し直す


=CONCATENATE("http://www3.keizaireport.com",importXML("http://www3.keizaireport.com/report.php/RID/275091/","//*[@id='bk_form']/h1/a/@href"))

綺麗にURLが生成される。

とりあえずこんな感じで完成!

18
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
15