2016-10-04 8 views
-1

単純なウェブサイトのHTMLテキストを印刷したいだけです。印刷しようとすると、実際の改行ではなく、改行文字(\n)を使って、以下のテキストをそのままの形式で取得します。私は他のもののすべての種類を試してみましたが、いくつかのものを発見したPython 3.xで行ごとにWebページを印刷するには

import urllib.request 

page = urllib.request.urlopen('http://www.york.ac.uk/teaching/cws/wws/webpage1.html', data = None) 
pageText = page.read() 
pageLines = page.readlines() 
print(pageLines) 
print(pageText) 

は、これは私のコードです。文字列に変換した後でもpageText変数のインデックスを作成しようとすると、\n文字が見つかりません。 \nとIという新しい行を使って生のテキストを自分自身でコピーしようとすると、\n文字が実際の新しい行に変換されます。問題は、自分でそれをコピーせずにその結果を得ることができないということです。ここでは、私が何を意味するかを示すために

は、いくつかのHTMLスニペットは、次のとおりです。

生のテキスト:

b'<HMTL>\n<HEAD>\n<TITLE>webpage1</TITLE>\n</HEAD>\n<BODY BGCOLOR="FFFFFf" LINK="006666" ALINK="8B4513" VLINK="006666">\n 

私が欲しいもの:

b'<HMTL> 
<HEAD> 
<TITLE>webpage1</TITLE> 
</HEAD> 
<BODY BGCOLOR='FFFFFf' LINK='006666' ALINK='8B4513' VLINK='006666'> 

私はまた、使用します:

page = str(page) 
lines = page.split('\n') 

そして驚いたことに何もしなかった。 ただ1行で表示しました。

お願いします。私は私のために働いたものは何も見つけられなかったことに驚いています。フォーラムでさえ、何も働かなかった。

+1

'ラインのページで:プリント(line.decode( 'UTF-8'))'や 'プリント(page.read()UTF-'(デコード。 8 ')) ' –

答えて

0

これを行う1つの方法は、pythons要求モジュールを使用することです。 pipインストール要求を行うことで入手できます(virtualenvを使用していない場合はsudoを使用する必要があります)。

import requests 

res = requests.get('http://www.york.ac.uk/teaching/cws/wws/webpage1.html') 
if res.status_code == 200: # check that the request went through 
    # print the entire html, should maintain internal newlines so that when it print to screen it isn't on a single line 
    print(res.content) 

    #if you want to split the html into lines, use the split command like below 
    #lines = res.content.split('\n') 
    #print(lines) 
+0

なぜこのようなトラブルが起きるのですか? – bjd2385

+0

OPはループしたくなかったので。彼は、整形されたHTMLコードのブロックを望んで、視覚的に改行を示しました。また、4行のコードはほとんど問題になりません。なぜコンテンツを印刷するためにループするのですか?res.contentを印刷するとコンテンツが印刷され、すでにフォーマットされたブロックに印刷されるのはなぜですか? – reticentroot

0

あなたのバイト文字列には、\nがハードコードされているようです。

たとえば、値を最初に分割することはできません。

In [1]: s = b'<HMTL>\n<HEAD>\n' 

In [2]: s.split('\n') 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-2-e85dffa8b351> in <module>() 
----> 1 s.split('\n') 

TypeError: a bytes-like object is required, not 'str' 

だから、あなたはstr()ですが、それはどちらもうまくいかないようです。

In [3]: str(s).split('\n') 
Out[3]: ["b'<HMTL>\\n<HEAD>\\n'"] 

しかし、あなたはそれが多少動作しない新しい行を逃れる場合。

In [4]: str(s).split('\\n') 
Out[4]: ["b'<HMTL>", '<HEAD>', "'"] 

あなた

In [5]: for line in str(s).split(r'\n'): 
    ...:  print(line) 
    ...: 
b'<HMTL> 
<HEAD> 
' 

それとも、あなたがリードするbをしたくない場合は、あなたは、あなたができる文字列オブジェクトにバイト列をdecodeすることができますに分割するために、生の文字列を使用することができます分割する。

In [9]: for line in s.decode("UTF-8").split('\n'): 
    ...:  print(line) 
    ...: 
<HMTL> 
<HEAD> 
0

あなたはテキストではなくバイトです。あなたがテキストをデコードするだけであれば。

b = b'<HMTL>\n<HEAD>\n<TITLE>webpage1</TITLE>\n</HEAD>\n<BODY BGCOLOR="FFFFFf" LINK="006666" ALINK="8B4513" VLINK="006666">\n' 
s = b.decode() # might need to specify an encoding 
print(s) 

出力:

<HMTL> 
<HEAD> 
<TITLE>webpage1</TITLE> 
</HEAD> 
<BODY BGCOLOR="FFFFFf" LINK="006666" ALINK="8B4513" VLINK="006666"> 
関連する問題