Analyser Html à l'aide de lxml et xpath
Je suis en train de l'utiliser avec python lxml parce que, après la lecture et l'action google est recommandé d'utiliser de lxml sur les autres d'analyse de paquets. J'ai à la suite de dom structure et je gère le bon xpath et je double-vérifier mon xpath sur xpath vérifier pour confirmer la validité. Xpath fonctionne très bien sur Xpath Checker mais quand je l'ai mis avec lxml en python, je ne suis pas d'obtenir des résultats infract-je obtenir de l'objet au lieu de texte.
Voici mon dom structure:
<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 suivante que j'ai écrit me donne ce que je veux..
//td//font[text()='Brand']/following::td[1]
Mais avec lxml je suis pas d'obtenir le résultat:
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]")
Voici les mettre à
[<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>]
Je l'ai essayé à la suite d'un changement, mais encore je ne suis pas d'obtenir le résultat, Le code que j'ai écrit a l'url, j'espère que ça va aider pour une meilleure réponse:
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)
OriginalL'auteur add-semi-colons | 2012-08-28
Vous devez vous connecter pour publier un commentaire.
ajoutant un
[0].text
à la fin de l'instruction d'impression dans votre réponse devrait vous donner ce que vous voulez. En gros, tout ce qui est imprimé dans votre question, un seul élément des listes delxml.etree._Element
s, qui ont des attributs commetag
ettext
que vous pouvez utiliser pour obtenir des propriétés différentes. Donc, essayez deJe suis à l'obtention d'un indice hors limites avec votre réponse
édité ma réponse en conséquence
hmm, je reçois toujours tous Aucune valeurs
je crois que le texte de l'attribut de votre
<td>
élément n'est parce que votre<td>
éléments ne sont pas directement contiennent du texte. vous pouvez modifier votre xpath pour accéder aux éléments imbriqués (par exemple<font>
) qui contiennent du texte comme un enfant directOriginalL'auteur Emmett Butler