Python: Extraction de données spécifiques avec analyseur html
J'ai commencé à utiliser le HTMLParser en Python pour extraire des données à partir d'un site web.
Je reçois tout ce que je voulais, à l'exception du texte dans les deux balises de HTML.
Voici un exemple de la balise HTML:
<a href="http://wold.livingsources.org/vocabulary/1" title="Swahili" class="Vocabulary">Swahili</a>
Il y a aussi d'autres balises de départ . Ils ont d'autres attributs et de valeurs, et donc je ne veux pas avoir leurs données:
<a href="http://wold.livingsources.org/contributor#schadebergthilo" title="Thilo Schadeberg" class="Contributor">Thilo Schadeberg</a>
La balise est une balise imbriquée à l'intérieur d'un tableau. Je ne sais pas si cela fait une différence entre les autres balises.
Je veux seulement l'information dans certains des balises " a " avec l'attribut class="Vocabulaire" et je veux que les données à l'intérieur de la balise, dans l'exemple, il serait "Swahili".
Donc, ce que j'ai fait est:
class AllLanguages(HTMLParser):
'''
classdocs
'''
#counter for the languages
#countLanguages = 0
def __init__(self):
HTMLParser.__init__(self)
self.inLink = False
self.dataArray = []
self.countLanguages = 0
self.lasttag = None
self.lastname = None
self.lastvalue = None
#self.text = ""
def handle_starttag(self, tag, attr):
#print "Encountered a start tag:", tag
if tag == 'a':
for name, value in attr:
if name == 'class' and value == 'Vocabulary':
self.countLanguages += 1
self.inLink = True
self.lasttag = tag
#self.lastname = name
#self.lastvalue = value
print self.lasttag
#print self.lastname
#print self.lastvalue
#return tag
print self.countLanguages
def handle_endtag(self, tag):
if tag == "a":
self.inlink = False
#print "".join(self.data)
def handle_data(self, data):
if self.lasttag == 'a' and self.inLink and data.strip():
#self.dataArray.append(data)
#
print data
Le programme imprime toutes les données qui est inclus dans une balise, mais je ne veux celui inclus dans la balise avec les bons attributs.
Comment puis-je obtenir ces données spécifiques?
OriginalL'auteur IssnKissn | 2013-05-27
Vous devez vous connecter pour publier un commentaire.
Semble que vous avez oublié de mettre
self.inLink = False
danshandle_starttag
par défaut:imprime:
Aussi, jetez un oeil à:
Espère que ça aide.
Vous êtes les bienvenus. Envisager d'accepter la réponse si elle a été utile, merci!
Avez-vous une recommandation de l'aide d'un analyseur? J'ai besoin des données de la version html de fichier et que vous souhaitez écrire dans un fichier xml. Laquelle aimeriez-vous utiliser? Ou quels sont les avantages de l'une de l'analyseur?
Eh bien, beautifulspoup et lxml sont décents html analyseurs. lxml est célèbre pour sa vitesse, beautifulsoup est assez pratique, mais ne prend pas en charge les expressions xpath. En savoir plus: blog.ianbicking.org/2008/03/30/python-html-parser-performance, stackoverflow.com/questions/3577641/..., stackoverflow.com/questions/6494199/....
Eh bien, je dois analyser un grand nombre de données, donc beautifulsoup est assez lent. Mais je pense que je vais essayer lxml. Merci beaucoup
OriginalL'auteur alecxe
Vous pouvez essayer HTQL (http://htql.net). La requête pour:
"les balises" a " avec l'attribut class="Vocabulaire" et je veux que les données à l'intérieur de la balise"
est:
Le code python est quelque chose comme ceci:
OriginalL'auteur seagulf