2 votes

Comment imprimer des valeurs nulles en python si un texte n'est pas trouvé dans une page HTML ?

J'ai besoin d'un moyen de rendre une valeur nulle et de l'ajouter à une liste en python lorsque du texte est manquant dans une page Html.

Les données brutes rendues en Html sont les suivantes :

  <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">TICKER: </SPAN><SPAN CLASS="c2">FB (NASDAQ) (57%); </SPAN><SPAN CLASS="c4">AXP</SPAN><SPAN CLASS="c2"> (NYSE) (54%)</SPAN></P>
    </DIV>
  <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">INDUSTRY: </SPAN><SPAN CLASS="c2">NAICS511110 NEWSPAPER PUBLISHERS (61%); SIC2711 NEWSPAPERS: PUBLISHING, OR PUBLISHING &amp;</SPAN></P>
  </DIV>
  <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">LOAD-DATE: </SPAN><SPAN CLASS="c2">November 7, 2016</SPAN></P>
<!-- Hide XML section from browser
</DOCFULL>
    </DOC> -->
    <DIV CLASS="c10">&nbsp;</DIV>
    <A NAME="DOC_ID_0_2"></A><!-- Hide XML section from browser
    <DOC NUMBER=3>
    <DOCFULL> -->
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">TICKER: </SPAN><SPAN CLASS="c2">CS (PAR) (91%); AXJ (ASX) (91%); AXA (BIT) (91%); </SPAN><SPAN CLASS="c4">AXP</SPAN><SPAN CLASS="c2"> (NYSE) (57%)</SPAN></P>
    </DIV>
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">COUNTRY: </SPAN><SPAN CLASS="c2">UNITED KINGDOM (88%)</SPAN><SPAN CLASS="c2">&nbsp;</SPAN><SPAN CLASS="c2">United Kingdom GB</SPAN></P>
    </DIV>
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">REGION: </SPAN><SPAN CLASS="c2">Europe; EU; Western Europe</SPAN></P>
    </DIV>
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">LOAD-DATE: </SPAN><SPAN CLASS="c2">May 12, 2016</SPAN></P>

J'ai besoin d'écrire les valeurs du texte entre les balises, qui sont ; TICKER , INDUSTRY , COUNTRY , REGION y LOAD-DATE en deux listes distinctes.

  • L'ensemble 1 doit contenir TICKER , INDUSTRY y LOAD-DATE .
  • L'ensemble 2 doit contenir COUNTRY y REGION .

Si COUNTRY est manquant dans le texte, je dois ajouter une entrée contenant un Null à la liste correspondante.

Exemple

  • La première liste de balises Html ne contient pas COUNTRY et ainsi de suite NULL doit être stocké
  • La deuxième liste de balises Html contient COUNTRY et ainsi de suite United Kingdom doivent être stockées.

Le résultat devrait devenir :

['Null', 'United Kingdom\nUnited Kingdom GB']

Les solutions que j'ai essayées sont les suivantes :

countrypattern="\<SPAN CLASS=\"c8\"\>COUNTRY: </SPAN><SPAN CLASS=\"c2\"\>(.*)\</SPAN>"
countrypatternvalues=[a.strip("*") for a in re.findall(countrypattern,response)]
if not countrypatternvalues:
     countrypatternvalues.append(None)
countryvalues = re.sub(cleanr, '', str(countrypatternvalues))

Veuillez m'aider à résoudre ce problème.

1voto

Marek Nowaczyk Points 257

Vous êtes ici :

import re

res = re.findall(r"""<SPAN CLASS="c8">([A-Z]+): *</SPAN><SPAN CLASS="c2">([^<]*)</SPAN>""",html)

class Items(object):
    def __init__(self):
        # list of items
        self.items = []             

    def add_item(self, name, value):
        if (not self.items) or (name in self.items[-1]):
            self.items.append({})
        self.items[-1][name] = value

    def get_list(self, key):
        return [ item[key] if key in item else None for item in self.items ]         

items = Items()

for item in res:
    items.add_item(item[0], item[1])

print items.get_list('COUNTRY')

Cela fonctionne s'il n'y a pas de doublons de noms dans les groupes, car les doublons engendrent un autre groupe.

0voto

Christian Safka Points 305

J'ai édité un jsFiddle que j'ai trouvé pour vous donner un exemple de la façon dont cela peut être fait en utilisant split(':')

http://jsfiddle.net/4XumV/29/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X