使用Python3打印HTML数据

使用Python3打印HTML数据,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我是Python新手。我正在学习Python2.7的课程,但同时,我希望能够用Python3完成所有工作 Python 2.7中的代码: 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')

我是Python新手。我正在学习Python2.7的课程,但同时,我希望能够用Python3完成所有工作

Python 2.7中的代码:

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()
生成格式正确的数据,如下所示:

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

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正确格式化? 在打印之前,我尝试将其转换为字符串,但没有任何帮助。

它有一个b,因为mysock.recv返回的是bytes类型。您应该使用decode将字节字符串解码为unicode字符串:

请记住,Python2和Python3在中指定的字符串方面有所不同。Python3提供了文本和二进制数据之间的清晰分离,Python2则没有

这里的问题是,当print接收到bytes对象时,它会调用str,str只会根据它最清楚的情况从中生成一个字符串;i、 e避开反斜杠,保留其余部分:

>>> str(b"hello\nworld")
"b'hello\\nworld'"
然后print会将其打印出来。

它有一个b,因为mysock.recv返回的是bytes类型。您应该使用decode将字节字符串解码为unicode字符串:

请记住,Python2和Python3在中指定的字符串方面有所不同。Python3提供了文本和二进制数据之间的清晰分离,Python2则没有

这里的问题是,当print接收到bytes对象时,它会调用str,str只会根据它最清楚的情况从中生成一个字符串;i、 e避开反斜杠,保留其余部分:

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

然后print将把它打印出来。

这是一种获取HTML的有趣方法。。。你找到请求库了吗?@Marki,所以基本上你在Python3中正确地发送和接收字节。所以你需要做的是在打印前解码。例如,打印数据,解码“utf-8”,谢谢你们。我还没有找到请求库。然而,我对urllib库很感兴趣。我明天会读到它们。这是一种获取HTML的有趣方法。。。你找到请求库了吗?@Marki,所以基本上你在Python3中正确地发送和接收字节。所以你需要做的是在打印前解码。例如,打印数据,解码“utf-8”,谢谢你们。我还没有找到请求库。然而,我对urllib库很感兴趣。我明天会读到他们。谢谢你回答我的问题:-谢谢你回答我的问题:-