如何在Python3.x中逐行打印网页

如何在Python3.x中逐行打印网页,python,python-3.x,web,Python,Python 3.x,Web,我想做的就是打印一个简单网站的HTML文本。当我尝试打印时,我会以原始格式获得以下文本,其中包含换行符(\n),而不是实际的新行 这是我的代码: 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() pri

我想做的就是打印一个简单网站的HTML文本。当我尝试打印时,我会以原始格式获得以下文本,其中包含换行符(
\n
),而不是实际的新行

这是我的代码:

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)
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'>
我尝试过各种各样的东西,发现了一些东西。当我尝试为
pageText
变量编制索引时,即使将其转换为字符串,也找不到任何
\n
字符。如果我尝试用表示为
\n
的新行复制原始文本,并且我
print()
这样做,它会将
\n
字符转换为我想要的实际新行。问题是,如果不亲自复制,我就无法得到这个结果

为了向您展示我的意思,以下是一些HTML片段:

原始文本:

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)
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'>
令人惊讶的是,它什么也没做。 它只是把它打印成一行


请帮帮我。我很惊讶,我没有发现对我有用的东西。即使在论坛上,也没有任何效果。

一种方法是使用pythons请求模块。您可以通过执行pip安装请求来获得它(如果您没有使用virtualenv,则可能必须使用sudo)


您的字节字符串中似乎有硬编码的
\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'
但是,如果你摆脱了新的路线,它确实有些作用

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

你拥有的不是文本而是字节。如果你想要文本,就把它解码

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)
b=b'\n\nwebpage1\n\n\n'
s=b.decode()#可能需要指定编码
印刷品
输出:

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

网页1

对于page-in-line:print(line.decode('UTF-8'))
print(page.read().decode('UTF-8'))
既然可以在上面循环,为什么还要经历这些麻烦呢?因为OP不想在上面循环。他想要一块格式化的html代码,并直观地显示换行符。另外,4行代码也不算麻烦。打印res时,为什么要循环打印内容。内容以已格式化的块打印内容?
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">