3

Googleの推奨事項を読んで実行した後、他の解析パッケージよりもlxmlを使用することであるため、Pythonでlxmlを使用しようとしています。次の dom 構造があり、正しい xpath の書き込みを管理し、xpath チェックで xpath を再確認して、その有効性を確認します。Xpath は Xpath Checker で正常に動作しますが、Python で lxml を使用して配置すると、実際のテキストではなくオブジェクトを取得して、結果が得られません。

これが私のdom構造です:

<div class="pdsc-l">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<td width="35%" valign="top">
<font size="2" face="Arial, Helvetica, sans-serif">Brand</font>
</td>
<td width="65%" valign="top">
<font size="2" face="Arial, Helvetica, sans-serif">HTC</font>
</td>
</tr>
<tr>
<td width="35%" valign="top">
<td width="65%" valign="top">

私が書いたxpathに従うと、私が望むものが得られます..

//td//font[text()='Brand']/following::td[1]

しかし、lxml を使用すると、結果が得られません。

This is my code:
    rawPage = urllib2.urlopen(request)
    read = rawPage.read()
    #print read
    tree = etree.HTML(read)    
    for tr in tree.xpath("//tr"):
        print tr.xpath("//td//font[text()='Brand']/following::td[1]")

アウトプットはこちら

[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]
[<Element td at 0x10ad80b90>]

次の変更で試してみましたが、まだ結果が得られません。私が書いたコードにはURLがあります。うまくいけば、より良い答えに役立つでしょう:

from lxml import etree
from lxml.html import fromstring, tostring
    url = 'http://www.ebay.com/ctg/111176858'
    request = urllib2.Request(url)
    rawPage = urllib2.urlopen(request)
    read = rawPage.read()
    #print read
    tree = etree.HTML(read)    
    for tr in tree.xpath("//tr"):
        t = tr.xpath("//td//font[text()='Brand']/following::td[1]")[0]
        print tostring(t)
4

1 に答える 1

9

回答の print ステートメントの最後にa を追加する[0].textと、必要なものが得られます。基本的に、質問に表示されているのは、lxml.etree._Elementのような属性を持ち、さまざまなプロパティを取得するために使用できる s のtag単一text要素リストです。だから、試してみてください

tr.xpath("//td//font[text()='Brand']/following::td[1]")[0].text
于 2012-08-28T18:48:29.230 に答える