2016-10-04 37 views
-1

我只想打印簡單網站的HTML文本。當我嘗試打印時,我使用換行符(\n)以原始格式顯示下面的文本,而不是實際的新行。如何在Python 3.x中逐行打印網頁

這是我的代碼:

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字符。如果我嘗試使用代表\nprint()的新行自己複製原始文本,它會將\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') 

它驚奇地沒有做任何事。 它只是把它打印成一行。

請幫幫我。我很驚訝,我發現沒有任何工作適合我。即使在論壇上,也沒有任何工作。

+1

'用於頁行:打印(line.decode( 'UTF-8'))'或'打印(page.read()進行解碼('UTF- 8'))' –

回答

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) 
+0

爲什麼要經歷所有這些麻煩,當一個人可以繞過它? – bjd2385

+0

因爲OP不想循環它。他想要一段被格式化的html代碼,並在視覺上顯示換行符。另外,4行代碼幾乎不麻煩。爲什麼要循環打印內容,在打印res.content時打印內容和已格式化的塊? – reticentroot

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> 
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">