2017-09-11 96 views
0

我是Python新手,我一直在努力弄清楚下面的練習。python檢索網頁數據

練習5 :(高級)更改套接字程序,使其僅在收到標題和空白行後顯示數據。請記住,recv正在接收字符(換行符和全部),而不是行。

我重視我想出了下面的代碼,不幸的是,我不認爲這是工作:

import socket 
mysocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
mysocket.connect(('data.pr4e.org', 80)) 
mysocket.send('GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()) 

count=0 
while True: 
      data = mysocket.recv(200) 

      if (len(data) < 1): break 

      count=count+len(data.decode().strip()) 
      print(len(data),count) 
      if count >=399: 
       print(data.decode(),end="")   
mysocket.close() 

回答

1

而不是計算行數收取,只要抓住你所得到的數據,然後拆分在第一雙CRLF你發現。

resp = [] 
while True: 
      data = mysocket.recv(200) 

      if not data: break 
      resp.append(data.decode()) 
mysocket.close() 

resp = "".join(resp) 
body = resp.partition('\r\n\r\n')[2] 
print(body) 
+0

我會研究分區,因爲我一直專注於分割。 – PythonLearner

+0

@ PythonLearner1977你可以使用'resp.split('\ r \ n \ r \ n',1)[1]'(分隔參數'1'告訴它只執行一次分割)來得到相同的結果。我只是喜歡'分區',沒有其他理由專門使用它。 –