2016-08-29 14 views
0

私はPythonを初めて使用しています。私は、Python 2.7でコースをやっているが、同時に、私は、Python 2.7でPythonで3Python 3でHTMLデータを印刷

コードをすべてを行うことができるようにしたい:

import socket 

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
mysock.connect(('www.py4inf.com', 80)) 
mysock.send('GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n') 

while True: 
    data = mysock.recv(512) 
    if (len(data) < 1) : 
     break 
    print data 

mysock.close() 
適切にそうように、データをフォーマットし

利回り:Pythonの3の

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

コード:

import socket 

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
mysock.connect(('www.py4inf.com', 80)) 
mysock.send(('GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n').encode()) 

while True: 
    data = mysock.recv(512) 
    if (len(data) < 1) : 
     break 
    print(data); 

mysock.close() 

そして、それが得られます。

b'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset="utf-8"\r\nContent-Length: 2788\r\nConnection: Close\r\n\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n 

ご覧のとおり、「b」文字が追加され、\ r \ nは無視されます。フォーマットは途中で終了します。 「b」はどこから来たのですか?どうすればPythonを適切にフォーマットできますか? 印刷する前に文字列に変換しようとしましたが、それは役に立ちませんでした。

+1

これは、HTMLを取得する興味深い方法です...まだ 'requests'ライブラリが見つかりましたか? –

+0

@ Marky、基本的にPython3でバイトを送受信しています(適切に)。だからあなたがする必要があるのは、印刷前にそれを解読することです。すなわち、 'print(data.decode( 'utf-8'))' – Anzel

+0

ありがとうございました。リクエストライブラリはまだ見つかりませんでした。私はしかし、urllibライブラリに興味があった。私は明日彼らについて読む予定です。 – Marki

答えて

2

それはmysock.recvによって返されるどのような種類bytesであるb''ので、持っています。あなたはdecodeとユニコード1に、あなたのバイトの文字列をデコードする必要があります

print(data.decode('utf-8')) 

PEP 3137に指定されているPythonの2と3は、文字列に関して異なる、覚えておいてください。 Python 3では、テキストとバイナリのデータを明確に区別していますが、Python 2ではそうではありません。

ここでの問題は、printがあなたのbytesオブジェクトを受け取ったときに、strを呼び出して、それが最もよく分かっている文字列を単純に構築することです。バックスラッシュをエスケープし、残りを保持すなわち:

>>> str(b"hello\nworld") 
"b'hello\\nworld'" 

その後printはちょうどそれを取ると、それをプリントアウトします。

+0

私の質問にお答えいただきありがとうございます:-) – Marki

+0

@Markiよろしくお願いします:-) –