特定の入力フィールドの HTML ページをスクレイピングしようとしています (ログイン時に使用するトークンを抽出できるようにするため)。私は SBCL 1.0.54 (このバージョンは StumpWM で適切に動作するため)、quicklisp、および次の quicklisp パッケージを使用しています。
drakma
closure-html
cxml-stp
Drakma を使用して HTML ページをロードし、それを有効な X(HTML) に変換すると、次のコードを使用できます (Plexippus XPath の例から大まかに変更):
(xpath:do-node-set (node (xpath:evaluate "//*" xhtml-tree))
(format t "found element: ~A~%"
(xpath-protocol:local-name node)))
...次の結果を取得します(簡潔にするために省略されています。問題のページは大きいです):
found element: img
found element: a
found element: img
found element: script
found element: div
found element: img
found element: a
found element: input
found element: input
ただし、「//*」よりも複雑な XPath ステートメントを正しく動作させることはできないようです。私の目的は、特定の名前の入力を見つけることですが、すべての入力を見つけるだけでも失敗します:
* (xpath:evaluate "//input" xhtml-tree)
#<XPATH:NODE-SET empty {10087146F3}>
ここでかなり基本的なことが明らかに欠けています。誰かが私に正しい方向へのポインタを教えてもらえますか?