2017-09-11 94 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'告诉它只执行一次分割)来得到相同的结果。我只是喜欢'分区',没有其他理由专门使用它。 –