我想要做的就是打印一个简单网站的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')
并且令人惊讶地没有做任何事情。 它只是将它打印成一行。
请帮帮我。我很惊讶我没有发现任何对我有用的东西。即使在论坛上,也没有任何效果。
答案 0 :(得分:0)
一种方法是使用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)
答案 1 :(得分: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>
答案 2 :(得分: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">