Trouver l'élément html avec classe à l'aide de lxml
J'ai cherché partout et je ne trouve était doc.xpath('//élément[@class="classname"]"), mais cela ne fonctionne pas, peu importe ce que j'essaie.
code que j'utilise
import lxml.html
def check():
data = urlopen('url').read();
return str(data);
doc = lxml.html.document_fromstring(check())
el = doc.xpath("//div[@class='test']")
print(el)
Il imprime simplement une liste vide.
Edit:
Comme c'est étrange. J'ai utilisé google qu'une page de test et cela fonctionne très bien, mais il ne fonctionne pas sur la page, j'ai été en utilisant (youtube)
Voici le code exact que j'utilise.
import lxml.html
from urllib.request import urlopen
import sys
def check():
data = urlopen('http://www.youtube.com/user/TopGear').read(); #TopGear as a test
return data.decode('utf-8', 'ignore');
doc = lxml.html.document_fromstring(check())
el = doc.xpath("//div[@class='channel']")
print(el)
'url'
est un 3-chaîne de caractères. Ce n'est pas un fichier HTML.Évidemment, je n'ai qu'au lieu de poster l'url réelle.
Veuillez fournir une SSCCE.
OriginalL'auteur Vexx | 2011-11-22
Vous devez vous connecter pour publier un commentaire.
La TopGear page que vous utilisez pour les tests n'ont pas
<div class="channel">
éléments. Mais cela fonctionne (par exemple):Ou ceci:
Pour trouver
<div>
éléments avec unclass
attribut contient la chaînechannel
, vous pouvez utiliserbranded-page channel
n'est pas le même quechannel
.Mais, selon le css, cet élément a deux classes, marque-page et le canal. Alors, pourquoi ne serait-il pas?
Oui, selon le CSS il y a deux classes. Mais XPath ne connaissent pas les règles de CSS. XPath,
branded-page channel
est juste une chaîne de caractères sans signification particulière.C'est en fait très utile, merci. Tout comme un test, j'ai essayé d'obtenir un élément sur cette page, et ça ne fonctionne pas non plus. Cela commence vraiment à me faire chier. el = doc.xpath('//a[@class="vote-accepté-off"]"), Il apparaît qu'il n'aime pas à trouver des éléments qui n'ont pas les éléments enfants.
OriginalL'auteur mzjn
Vous pouvez utiliser lxml.cssselect pour simplifier
class
etid
demande: http://lxml.de/dev/cssselect.htmlOriginalL'auteur dmzkrsk