Google スプレッドシートでXpathが正しくないからなのか情報が取得できない

スクレイピングについて、質問です。
こちら https://review-of-my-life.blogspot.com/2017/07/google-spreadsheet-information.html を参考にして、ふるさと納税の候補の情報→ http://f.hatena.ne.jp/moon-fondu/20181103203200
を、取得しようと思いました。

http://f.hatena.ne.jp/moon-fondu/20181103203905 にありますように、Google Chormeの検証ツールを使って、ちょうど"おせち"という用語に該当する場所のXPathを取得しました。

//*[@id="main"]/div[2]/div/div[1]/section[4]/div/ul/li[1]

しかし…スプレッドシートに正しい関数を入れているはずなのですが、エラーになってしまいまして。
http://f.hatena.ne.jp/moon-fondu/20181103204459
どうすれば正しく「おせち」という用語をスプレッドシート取得できるのか、お教えいただけますと幸いです。

よろしくお願い致します。

回答の条件
  • 1人20回まで
  • 登録:2018/11/03 20:48:37
  • 終了:2018/11/06 21:46:01

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4752ベストアンサー獲得回数20392018/11/03 22:47:41

ポイント2000pt

「できません」という回答を書くのは、ちょっと躊躇したのですが、回答に書かせてもらいます。

Google スプレッドシートの関数名が IMORTXML とあるように、対象のページが XMLとして認識できないと、あの関数はエラーを返します。

HTML は XML っぽい感じですが、大きく違うところは、タグを閉じるところを省略できるところです。
HTML だと、IMG は、そもそも閉じるタグを要求しませんし、TABLE や LI とかは、閉じるタグを書かないことが普通にあります。
でも、XML では、文法として許されていません。

ブラウザは解釈してくれるのですが、スプレッドシートの INPORTXML は、その辺りを厳密に解釈しているようで、閉じるタグがきちんと書かれていないページの解釈では失敗してしまいます。

他3件のコメントを見る
id:a-kuma3

Amazon の方は行けました :-)

Google スプレッドシートではなく、Ruby のコードです。
Mechanize というライブラリを使ってます。

require 'openssl'
require 'mechanize'

agent = Mechanize.new
agent.verify_mode = OpenSSL::SSL::VERIFY_NONE

page = agent.get('https://www.amazon.co.jp/trends/')

trend = page.search('.trending-keyword')
trend.each { |item|
    puts item.text.strip
}

標準出力には、以下のように出力されます。

クリスマスコフレ
ルナソル
スマブラ
クリスマスツリー
ヴェノム
ダウンジャケット メンズ
セグウェイ
カナダグース
ワークマン
ナマケモノ
クリスマスイルミネーション
クリスマス 飾り
クリスマス
www amazon com jp
冷却ファン
ゲームボーイミクロ
twice yes or yes
エリップス
福袋
エムピウ 財布
2018/11/06 21:07:01
id:moon-fondu

ありがとうございます(^^;

rubyはまだ自分のWindows10にインストールしていませんが、
インストールして試してみます♪

また、もしお時間ありましたらコチラの方もご教授いただけますと幸いです。
http://q.hatena.ne.jp/1541508285
よろしくお願い致します。

2018/11/06 21:45:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません