2016-10-25 1 views
0

私はHTMLコンテンツを読み込み、データ(例:Wikipedia記事の行)を抽出しようとしています。ここに私のコードはPythonでです:Pythonのバイトオブジェクトを文字列に変換すると、html内のデータが消えます。

import urllib.request 
from html.parser import HTMLParser 

urlText = [] 


#Define HTML Parser 
class parseText(HTMLParser): 
    def handle_data(self, data): 
     print(data) 
     if data != '\n': 
      urlText.append(data) 


def main(): 

    thisurl = "https://en.wikipedia.org/wiki/Python_(programming_language)" 
    #Create instance of HTML parser (the above class) 
    lParser = parseText() 
    #Feed HTML file into parser. The handle_data method is implicitly called. 
    with urllib.request.urlopen(thisurl) as url: 
     htmlAsBytes = url.read() 
    #print(htmlAsBytes) 
    htmlAsString = htmlAsBytes.decode(encoding="utf-8") 
    #print(htmlAsString) 
    lParser.feed(htmlAsString) 
    lParser.close() 
    #for item in urlText: 
     #print(item) 

私はWebページからHTMLコンテンツを取得しないと私は、read()メソッドによって返されたバイトのオブジェクトを印刷する場合、私は、WebページのすべてのHTMLコンテンツを受信ように、それが見えます。しかし、このコンテンツを解析してタグを取り除き、読み込み可能なデータだけを保存しようとすると、私はまったく期待した結果を得られません。

問題は、パーサーのfeed()メソッドを使用するには、bytesオブジェクトを文字列に変換する必要があることです。これを行うには、変換を行うエンコーディングを受け取るdecode()メソッドを使用します。デコードされた文字列を印刷すると、印刷された内容にデータ自体(抽出しようとしている有用な読み込み可能なデータ)が含まれません。なぜそれが起こり、どのように私はこれを解決することができますか?

注:私は助けのためのPython 3

感謝を使用しています。

+2

自分でHTMLを解析するのではなく、BeautifulSoupの使用をお勧めします。 https://www.crummy.com/software/BeautifulSoup/ – Alden

+0

あなたが期待していることは分かりません。私があなたのプログラムを実行しようとすると、私は期待したことを得る。もちろん、あなたはまた、ページのすべてのjavascript、メニューコンテンツなどを持っています。だから、「有用な読み込み可能なデータ」はあなたが思う以上のものかもしれません。また、Aldenに同意する。 – Fabian

+0

私が理解しているところから、handle_dataメソッドはタグの間に書かれたデータだけを私に渡すことになっています。解析は、パーサー自体によってバックグラウンドで行われますか?私は車輪を作りません、私のために解析を行うことになっているコールバックをオーバーライドするだけです。しかし、私がパーサーに渡しているデータは誤りです。print(htmlAsString)行のコードをコメント解除してプログラムを実行しようとすると、何を意味するのかがわかります。 – logcat

答えて

0

Aldenが推奨したように、私は結局美容室を使って仕事をしましたが、なぜデコードプロセスが不思議なことにデータを取り除くのかまだ分かりません。

関連する問題