例 (/root/node/data)[last()] コード例 private void button3_Click(object sender, EventArgs e) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(textBox1.Text); XmlNodeList nodeList = xmlDocument.SelectNodes("(/root/node/data)[last()]"); for (int i=0; i < nodeList.Count; i++){ textBox2.Text += "NodeType: " + nodeList[i].NodeType + "\r\n"; textBox2.Text += "Name: " + nodeList[i].Name + "\r\n
などとやれば、それぞれ、 idが〇〇なspanが直下にあるh3 テキストが〇〇な任意のエレメントを含むh3 Cssクラスに〇〇を含むspanを含む h3 を取得できる。 解説 子を条件にその親エレメントを決めたい場合は多い。が、今のところCSSセレクタでは階層の上から辿るエレメント指定しかできない。。。 一応、CSS 4の草案では擬似要素 :has()はあるけどまだどのブラウザも効いてない。 そんなわけでお手軽なCSSセレクタで"〇〇な子を持つ親"を取ってくることはできない。 というわけでブラウザでサポートされるもう一つのセレクタ、XPathの登場になります。 JSで使うだけでなく、Pythonでクローラー作って特定の子を持つブロックだけスクレイピングしたい、という時も威力を発揮します。Selenuimでゴニョゴニョしたい、なんて場合はもはやマストです。 XPath、覚えておいて損はないで
ここ最近Pythonのlxmlモジュールを試していて、RSS1.0形式のデータをXPathで検索する場合は名前空間を指定しなければならないことを知った。 例えば、RSSから各記事のタイトル部分を取得したいとして RSS2.0の場合、「 /rss/channel/item/title 」でOKなのだが、 RSS1.0の場合、「 /rdf:RDF/item/title 」というようにルートノードから順に並べただけでは取得できない。 RSS1.0、RSS2.0、それぞれをダウンロードする。 $ wget -q http://www.pheedo.jp/f/gigazine_1 && mv gigazine_1 gigazine_rss1.xml $ wget -q http://www.pheedo.jp/f/gigazine_2 && mv gigazine_2 gigazine_rss2.x
スクレイピングにおけるXPathの使い方を初心者向けに解説した記事です。 XPathとは、基本的な書き方、id・classなど様々な属性やテキストの取得方法、contains関数の使い方など要点を全て解説しています。 XPathとは XPathとは、XML形式の文書から特定の部分を指定して取得するための簡易言語です。HTMLにも使うことができます。 XPathはスクレイピングにおいて、HTMLの中から特定の情報を指定し取得するのに利用されます。 HTMLは次のようにタグと言う記号で構成されており、開始タグ、終了タグで囲まれたものを要素といいます。 上記の要素はtitleタグに囲まれていますので、titile要素と言います。 またHTMLは、1つのタグが別のタグで囲われ、というように入れ子の状態で記述されます。これらは階層構造とみなすことができます。 例えば次のHTMLについては、 このよう
こんにちは。 今日も元気にクローラー作成!バックエンドエンジニアのりほやんです。 最近クローラーを作成する機会が多く、その時にXPathが改めて便利だと思ったので XPathについてまとめてみました!XPathを学ぶ方の役に立てれば幸いです。 初級編 XPathとは XPathはXML文章中の要素、属性値などを指定するための言語です。 XPathではXML文章をツリーとして捉えることで、要素や属性の位置を指定することができます。 HTMLもXMLの一種とみなすことができるため、XPathを使ってHTML文章中の要素を指定することができます。 例えば、 <html> ... <body> <h1>ワンピース</h1> <div class="item"> <span class="brand">iQON</span> <span class="regular_price">1,200円</s
CSSで取り出したり、XPathをフルパスで取り出すと面倒なので。 マッチ文字でデータを取り出して使いたい doc.xpath("//*[contains(./text(),'Ruby')]")Xpathはソレだけでクエリ言語として成立しているので、これを覚えるのが一番手っ取り早い。 こまったら 次を使う //タグ[contains( ./text() , "文字列" )] または属性で絞って //タグ[contains( ./@attr , "文字列" )] //*[contains( ./@attr , "文字列" )] あまりにざっくり書くと、親子ノードを連れてきちゃうので、タグや属性・text()は入れた方がいい //*は全ノードを示す よくある勘違い:contains(./text(),'検索文字')とcontains(.,'検索文字')は同じだよね? いいえ、違います "./t
NameSpace を使用しているXML文書に対する XPath 式は注意が必要です。 XPath を取り扱うライブラリに対して、どのネームスペースを使用するか、予め登録する必要もありますが、それが NG であるシチュエーションもあります。 たとえば、以下のSpring のXML Schema に対して、XPath 式の指定を考えます。 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <xsd:schema xmlns="http://www.springframework.org/schema/beans" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.springframework.org/schema/beans"> <xs
ちょっと前に仕事で考えることがあったので、 忘れないうちに書いておく //*[local-name()='hoge' and namespace-uri()='fuga'] これで <?xml version='1.0'?> <root> : <ns:hoge xmlns:ns='fuga'> : </ns:hoge> : </root> とかってXMLから真ん中のノードが取れる(ハズ) 詳細は、気が向いたら週末にでも追記する。 (追記) 何が問題だったか たいていのXPathライブラリは、実際のXPath実行の前に、 “これから使うXPath式では、名前空間fugaを表すプレフィックスとして「fugapx」を使いますよ”みたいな準備をする。 で、そのあと //fugapx:hoge みたいな式を実行してノードを取得する。なのでプログラム的には1行でとりにくい。 しかもこの中の「fugap
XML文書と名前空間の指定 XML文書では、異なる仕様で定められた要素を混在させることができます。 例えば RSS 1.0 では、channel, item など RSS 1.0 の仕様で定められた要素のほかに、 RDF の仕様で定められた RDF (rdf:RDF), Dublin Core という仕様で定められた date (dc:date) などが混在しています。 これらの要素がどの仕様で定められたものなのかを識別するため、 要素名の前に rdf, dc といった名前空間接頭辞(prefix)がつけられています。 接頭辞と、仕様を識別するためのURIとの対応が、root要素の属性に記述されています。 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmln
ある条件の子要素を持った、親要素を取得したい場合。 例: td のテキストがcode001のtrを取得したい //tr[td[text()='code001']] ただし、trの直接の子要素がtdの場合でないと使えない。 例: tdにaタグ(リンク)を含むtrを取得したい //tr[td/a] divとかがかまされてるかもしれないので、下のようにしたい気もするがこれは間違い //tr[//a] この場合、結果的に全部のtrをひろってしまうので注意。 参考: XPathで子要素の属性を条件に親要素を選択する方法 : xpath | メモリークラフト Written with StackEdit.
Defiant enables you to perform lightning-fast searches on JSON using XPath expressions, and transform JSON using XSLT. Notification! Hello friends, I have been working on a new project and now trying to raise interest as well as sign ups. I have created a ~4 minute long Youtube clip about it. Please check out the clip here and sign up if you find it interesting. Overview Do you need to query large
最近クローラーを作成する機会が多く、その時にXPathが改めて便利だと思ったので XPathについてまとめてみました! XPathを学ぶ方の役に立てれば幸いです。 初級編 XPathとは XPathはXML文章中の要素、属性値などを指定するための言語です。 XPathではXML文章をツリーとして捉えることで、要素や属性の位置を指定することができます。 HTMLもXMLの一種とみなすことができるため、XPathを使ってHTML文章中の要素を指定することができます。 例えば、 <html> ... <body> <h1>ワンピース</h1> <div class="item"> <span class="brand">iQON</span> <span class="regular_price">1,200円</span> <span class="sale_price">1,000円</sp
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く