[node] cheerio-httpcliで、レスポンスから現在のURLを取得する

概要

nodeでWebスクレイピングする際に、cheerio-httpcliを採用したが、要素クリックなどで画面遷移した先のURLを取得する方法で詰まったので、その解決方法の備忘録を残す。

コード例

以下では、Googleにアクセスし、キーワードに「デグー」と入力後、検索ボタンをクリック。ページ遷移後に、現在のURLを標準出力している。

const client = require('cheerio-httpcli')
client.fetch('https://www.google.co.jp/')
  .then((result) => {
    result.$('input[name=q]').val('デグー')
    return result.$('input[type=submit]').click()
  })
  .then((result) => {
    console.log(result.response.request.uri.href)
  })

実行結果

$ node hoge.js
https://www.google.co.jp/search?source=hp&ei=5exJWtraMMK60ATpuLewAQ&q=%E3%83%87%E3%82%B0%E3%83%BC&btnK=Google%20%E6%A4%9C%E7%B4%A2

解説

  • cheerio-httpcliによるページ遷移はPromiseを返すので、thenで結果を受け取ることができる
  • resultには、レスポンスオブジェクトのresponse、ボディ全文のbody、ボディに対してjQueryライクに操作できる$オブジェクトが含まれている
  • responseには、元のリクエストオブジェクトであるrequestが含まれてる
  • あとはリクエストオブジェクトからURLを抜き出すだけ

だいぶまどろっこしいことをしてる気がする。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です