私は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
感謝を使用しています。
自分でHTMLを解析するのではなく、BeautifulSoupの使用をお勧めします。 https://www.crummy.com/software/BeautifulSoup/ – Alden
あなたが期待していることは分かりません。私があなたのプログラムを実行しようとすると、私は期待したことを得る。もちろん、あなたはまた、ページのすべてのjavascript、メニューコンテンツなどを持っています。だから、「有用な読み込み可能なデータ」はあなたが思う以上のものかもしれません。また、Aldenに同意する。 – Fabian
私が理解しているところから、handle_dataメソッドはタグの間に書かれたデータだけを私に渡すことになっています。解析は、パーサー自体によってバックグラウンドで行われますか?私は車輪を作りません、私のために解析を行うことになっているコールバックをオーバーライドするだけです。しかし、私がパーサーに渡しているデータは誤りです。print(htmlAsString)行のコードをコメント解除してプログラムを実行しようとすると、何を意味するのかがわかります。 – logcat