2016-09-22 5 views
0

さらに解析するために、parser.feedの結果を文字列に保存しようとしています。 parser.feed現在、戻りなしをPython3 HTML.parser "feed"が返されません。

import requests 
from html.parser import HTMLParser 

class MyHTMLParser(HTMLParser): 
    def handle_data(self, data): 
     return("Encountered some data : ", data.encode('utf-8')) 

list_of_10K_text_files = ['https://www.sec.gov/Archives/edgar/data/200406/000020040616000071/0000200406-16-000071.txt', 
         'https://www.sec.gov/Archives/edgar/data/40545/000004054516000145/0000040545-16-000145.txt', 
         'https://www.sec.gov/Archives/edgar/data/1095130/000161577416007303/0001615774-16-007303.txt'] 

page = requests.get(list_of_10K_text_files[0]) 

parser = MyHTMLParser() 

pos_Large_Acc_filer = (page.text).find('Large accelerated filer') 
pos_Small_Reporting_Co = (page.text).find('Smaller reporting company') 

# I would like to save the results of parser.feed to "text_for_file" 
# as a string for further parsing 
text_for_file = parser.feed(page.text[pos_Large_Acc_filer:(pos_Small_Reporting_Co+150)]) 

# Output Desired in the text_for_file variable 
--------------------------------------------------------------------------- 
Encountered some data : b'Large accelerated filer\xc2\xa0\xc2\xa0' 
Encountered some data : b'\xc3\xbe' 
Encountered some data : b'\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Accelerated filer\xc2\xa0\xc2\xa0' 
Encountered some data : b'o' 
Encountered some data : b'\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Non-accelerated filer\xc2\xa0\xc2\xa0' 
Encountered some data : b'o' 
Encountered some data : b'\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Smaller reporting company\xc2\xa0\xc2\xa0' 
Encountered some data : b'o' 

が、私は上記のように、それは私がそれを解析することを可能にする形式で、出力を返す必要があります。しかし、parser.feedはここでどれ

が私のコードではありませんが返されませんさらにテキスト。

EDIT なぜ、私が.txtファイルを解析しようとしているのか不思議です。以下は、.txtファイルのテキストの例です。明らかに、それはHTMLであり、筆頭50以上のヘッダー情報行(私は含まれていません)のほかにあります。パーサーの

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <!-- Document created using Wdesk 1 --> 
    <!-- Copyright 2016 Workiva --> 
    <title>10-K</title> 
</head> 
    <body style="font-family:Times New Roman;font-size:10pt;"> 
     <a name="s5971963f20334f9f9b208ef25f6cc9cd"></a> 
     <div style="line-height:120%;padding-top:2px;text-align:center;font-size:12pt;"> 
      <font style="font-family:inherit;font-size:12pt;font-weight:bold;">UNITED STATES</font> 
     </div> 
     <div style="line-height:120%;text-align:center;font-size:12pt;"> 
      <font style="font-family:inherit;font-size:12pt;font-weight:bold;">SECURITIES AND EXCHANGE COMMISSION</font> 
     </div> 
     <div style="line-height:120%;text-align:center;font-size:12pt;"> 
      <font style="font-family:inherit;font-size:12pt;font-weight:bold;">Washington,&#160;D.C. 20549</font> 
     </div> 

EDIT

ソースコードは、ライン158 feed戻りself.goahead(0)feed機能が起動し、以下のリンク HTML.parser Source Code

で見つけることができます。 goahead(0)関数は、193行目から開始します。handle_data(ソースコードは534行目から始まります)は、goaheadによって返されますが、handle_dataが返す場合があります。これは奇妙に思えますが、私の特定の問題の原因かもしれません。

+0

'parser.feed'がNoneを返さないように' def handle_data(self、data): 'を編集するにはどうすればいいですか? – mkultra

+0

私はそれを理解できません:いくつかのHTML出力?実際のHTML入力を試すことができますか? –

+0

明白に私は私の問題を説明する良い仕事が必要です。私は明日更新します。私が解析しているテキストファイルは、htmlで書かれています。したがって、HTMLパーサはこれらのテキストファイルで動作します。 SECが.txtファイルとして提供するのはなぜですか? – mkultra

答えて

0

最初に、私は@ Jean-FrançoisFabreに感謝したいと思います。

だから、ここで見つける私の問題に対する一つの解決策(ことが判明:@WillTownes-StackOverflowはそうのようなstdoutをファイルにリダイレクトすることです:。

temp = sys.stdout                # store original stdout object for later 
sys.stdout = open("Form_10K_Data.txt", "w+")         # redirect all prints to this log file 
parser.feed(page.text[pos_Large_Acc_filer:(pos_Small_Reporting_Co+150)])  # again nothing appears. it's written to log file instead 
sys.stdout.close()               # ordinary file object 
sys.stdout = temp                # restore print commands to interactive prompt 

with open("Form_10K_Data.txt") as f: 
    filer_file = f.read().split('\n')[:-1] 

しかし、これはハック感じにもっとニシキヘビ解決策がありますこの問題?

関連する問題