2009-09-29 12 views
0

J'essaie d'apprendre lxml après avoir utilisé BeautifulSoup. Cependant, je ne suis pas un programmeur fort en général.Différence entre les attributs et les balises de style dans lxml

J'ai le code suivant dans une html source:

<p style="font-family:times;text-align:justify"><font size="2"><b><i> The reasons to eat pickles include: </i></b></font></p> 

Parce que le texte est en gras, je veux tirer de ce texte. Je ne peux pas sembler être en mesure de différencier que cette ligne particulière est en gras.

Quand j'ai commencé ce travail ce soir, je travaillais avec un document qui avait le mot en gras dans le style attrib comme ce qui suit:

<p style="font-style:italic;font-weight:bold;margin:0pt 0pt 6.0pt;text-indent:0pt;"><b><i><font size="2" face="Times New Roman" style="font-size:10.0pt;">The reason I like tomatoes include:</font></i></b></p> 

Je dois dire que le document que je travaille à partir est un fragment que je lis dans les lignes, les lignes jointes ensemble et ensuite utilisé la fonction html.fromstring

txtFile=open(r'c:\myfile.htm','r').readlines() 
strHTM=''.join(txtFile) 
newHTM=html.fromstring(strHTM) 

et donc la première ligne de code htm Je newHTM ci-dessus est [19]

Humm cela semble me se rapprocher

newHTM.cssselect('b') 

Je ne comprends pas bien encore, mais est ici la solution:

for each in newHTM: 
    if each.cssselect('b') 
     each.text_content() 

Répondre

0

En utilisant l'API CSS est vraiment pas la bonne approche. Si vous voulez trouver tous les éléments b, faites

strHTM=open(r'c:\myfile.htm','r').read() # no need to split it into lines first 
newHTM=html.fromString(strHTM) 
bELements = newHTM.findall('b') 
for b in bElements: 
    print b.text_content() 
+0

C'est ici que j'ai commencé et cela ne fonctionne pas. Aussi près que je peux comprendre c'est parce que le nouveauHTM est une classe et maintenant je suis perdu. Je ne sais pas pourquoi j'ai décidé d'opérer chacun dans newHTM mais c'était la clé. –

+0

Que voulez-vous dire, "ça ne marche pas"? Ça fonctionne bien pour moi. –

+0

Eh bien, je me trompe parce que les deux newHTM et le newHTML de chaque nouveau sont le même type d'objets, donc ce n'est pas – PyNEwbie