5

私はこのxpathクエリを持っています:

/html/body//tbody/tr[*]/td[*]/a[@title]/@href

title 属性を持つすべてのリンクを抽出し、hrefFireFoxの Xpath チェッカー アドオン を提供します。

しかし、私はそれを使用することはできませんlxml

from lxml import etree
parsedPage = etree.HTML(page) # Create parse tree from valid page.

# Xpath query
hyperlinks = parsedPage.xpath("/html/body//tbody/tr[*]/td[*]/a[@title]/@href") 
for x in hyperlinks:
    print x # Print links in <a> tags, containing the title attribute

これはlxml(空のリスト) から結果を生成しません。

Python でhref属性 title を含むハイパーリンクのテキスト (リンク) を取得するにはどうすればよいですか?lxml

4

2 に答える 2

12

次のコードで動作させることができました。

from lxml import html, etree
from StringIO import StringIO

html_string = '''<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head/>
<body>
    <table border="1">
      <tbody>
        <tr>
          <td><a href="http://stackoverflow.com/foobar" title="Foobar">A link</a></td>
        </tr>
        <tr>
          <td><a href="http://stackoverflow.com/baz" title="Baz">Another link</a></td>
        </tr>
      </tbody>
    </table>
</body>
</html>'''

tree = etree.parse(StringIO(html_string))
print tree.xpath('/html/body//tbody/tr/td/a[@title]/@href')

>>> ['http://stackoverflow.com/foobar', 'http://stackoverflow.com/baz']
于 2010-01-18T09:03:58.280 に答える
3

Firefoxは、レンダリング時に html に追加の html タグを追加するため、firebug ツールによって返される xpath が、サーバーによって返される実際の html (および urllib/2 が返すもの) と一致しなくなります。

タグを削除すると、<tbody>通常はうまくいきます。

于 2011-12-06T01:48:51.877 に答える