[英]How can I print a webpage line by line in Python 3.x
我想要做的就是打印一个简单网站的 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)
我尝试了各种其他的东西并发现了一些东西。 当我尝试索引pageText
变量时,即使将其转换为字符串,它也找不到任何\\n
字符。 如果我尝试使用表示为\\n
的新行自己复制原始文本并print()
,它会将\\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')
令人惊讶的是它什么也没做。 它只是将其打印为一行。
请帮我。 我很惊讶我没有发现任何对我有用的东西。 即使在论坛上,也没有任何效果。
一种方法是使用 python 请求模块。 您可以通过执行 pip install requests 来获取它(如果您不使用 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)
您的字节字符串中似乎有硬编码的\\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>
你拥有的不是文本而是字节。 如果你想要文本只是解码它。
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">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.