2016-12-05 9 views
2

null値をレンダリングし、Htmlページにテキストがない場合は、Pythonのリストに追加する方法が必要です。次のようにHTMLページにテキストが見つからない場合、Pythonでnull値を出力する方法は?

HTMLでレンダリングされた生データは、次のとおり

<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> 

Iは、インの間にあるタグ、テキスト値を記述する必要があります。 TICKER,INDUSTRY,COUNTRY,REGIONおよびLOAD-DATEを2つの別々のリストに分類する。

  • TICKERINDUSTRYLOAD-DATEを含むように1つのニーズを設定します。
  • セット2には、COUNTRYREGIONが含まれている必要があります。

COUNTRYがテキストから欠落している場合は、私が対応するリストにNull値を含むエントリを追加する必要があります。

  • 第一のHTMLタグリストは、COUNTRYを含んでいない、などNULL格納されるべき
  • 第二のHTMLタグリストは、COUNTRYを含有しない、などUnited Kingdomが格納されるべきです。

結果になる必要があります。次のように私が試してみました

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

ソリューションは、以下のとおりです。

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)) 

私はこの問題を解決してください。

+1

そのHTMLは*恐ろしい*です。なぜすべての帽子?なぜ各DIVの前にBRがあるのですか? –

+1

しかし、HTMLを解析するために正規表現を使用しようとしているのではないでしょうか。 –

+0

返信いただきありがとうございます。その場合、私の必要条件に合った適切な解決策を教えてください。 – Mho

答えて

1

を使用して行うことができる方法の例与えることが見出さjsFiddleを編集した:いいえがある場合

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') 

これは動作しますが重複が別のグループを生成するので、グループ内の名前の重複。

+0

出力にnull値を追加していません – Mho

+0

クラス 'Items'は、与えられたキーの値のリスト(値の数==アイテムの数)を返す' get_list'メソッドを実装しています。 –

0

私はあなたにこれがあなたはここでsplit(':')

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

+0

私は正確に理解していません。この答えは私の質問ですか? – Mho

+0

これは出発点です。親要素内のすべてのスパンのinnerHTMLを取得し、それらが空であるかどうかを確認して、split( ':')[1]で配列に値を追加するか、配列に 'NULL'を追加します空の場合。 –

関連する問題