XPathでページを削り取ろうとしましたが、期待通りに動作しませんでした。lxml XPath position()が機能しない
ページは
<tag1>
<tag2>
....
<div id=article>
<p> stuff1 </p>
<p> stuff2 </p>
<p> ...... </p>
<p> stuff30 </p>
は、私は、文字列としてstuff30
を通じてstuff1
を抽出したい、等です。ここに私のPythonのコードスニペットがあります。
import lxml.html
import urllib.request
html = urllib.request.urlopen('http://www.something.com/news/blah/').read()
root = lxml.html.fromstring(html)
content = root.xpath('string(//div[@id="article"]/p[position()=>1 and position()<=last()]/.)')
このコードでは何も返されませんでした。
position()
文から個々の要素インデックスに書き直すと動作します。
content = root.xpath('string(//div[@id="article"]/p[25]/.)')
このコードは、stuff25
を正しく返します。
私はこのためにループを実行したくありません。 position()
でコードを処理する方法があると思いますが、私のコードで何が間違っているのかはわかりません。
'position()=> 1'の近くで正しいですか?それは 'position()> = 1'でなければなりませんか? – Wickramaranga
いいえ、動作しないようです...下記の@tomalakのコメントでは、XPathの文字列は複数のノードでは動作しません。 –
@ K.K。それにもかかわらず、 '> ='でなければなりません。 '=>'はエラーを起こします。 – Tomalak