2017-05-30 18 views
0

htmlファイルからいくつかの情報を抽出しています。しかし、いくつかのファイルは、タグ内ではありませんbeautifulsoupの解析htmlタグの例外

AttributeError: 'NoneType' object has no attribute 'strip' 

を返すタグ<p class="p p1"> date </p>、およびファイルのいくつかの日付を持っていません。

<time content="2005-11-11T19:09:08Z" itemprop="datePublished"> 
Nov. 11, 2005 2:09 PM ET 
</time> 

この2つの問題を解決するにはどうすればよいですか?

マイコード:

month_list = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December', 'Jan', 'Feb', 'Aug', 'Oct', 'Dec'] 


def first_date_p(): 

    for p in soup.find_all('p', {"class": "p p1"}): 
     for month in month_list: 
      if month in p.get_text(): 
       first_date_p = p.get_text() 
       date_start = first_date_p.index(month) 
       date_text = first_date_p[date_start:] 
       return date_text 
      else: 
      #if the tag exist, but do not have date. 
       month = 'No Date/Error' 
       return month.strip() 
+0

あなたがそのあなたの日付の特性を探していることから始めるべきだと私には見えますそのすべての* HTMLファイルに適用します。実際には、複数の日付の形式があり、それぞれ別々に処理する必要があります。何種類のフォーマットがありますか? –

答えて

0

あなたが選択した 'P' タグは、常にあなたがすなわち、Truetext引数を設定することができ、いくつかのテキストが含まれていることを確認したい場合は、次の

エルス
soup.find_all('p', {"class": "p p1"}, text=True) 

、たとえ文字列が含まれていなくてもすべて 'p'を取得したい場合は、を文字列に変換できます。例:

str(p.get_text()).strip() 

あなたの2番目の質問については、あなたが「時間」タグの「コンテンツ」属性を選択することができますが、例えば:

soup.find('time').get('content')