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&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が生成される。
とりあえずこんな感じで完成!