帮我优化一下当前代码: import socket import re tp = input("请输入须要爬取的图片地址:") img_url = tp client = socket.socket() client.connect(("i02piccdn.sogoucdn.com",80)) data = "GET /a3ffebbb779e0baf HTTP/1.1\r\nHost:i02piccdn.sogoucdn.com\r\n\r\n" client.send(data.encode()) first_data = client.recv(1024) print("first_data",first_data) length = int(re.findall(b"Content-Length: (.*?)\r\n",first_data)[0]) print(length) image_data = re.findall(b"From Inner Cluster \r\n\r\n(.*?)",first_data,re.S) if image_data: image_data = image_data[0] else: image_data = b"" while True: temp = client.recv(1024) image_data += temp if len(image_data)>=length: break client.close() with open("kali.png","wb") as f: f.write(image_data)
时间: 2024-04-08 14:35:10 浏览: 77
网站图片爬取代码
以下是你的代码的优化版本:
```python
import socketimport re
def download_image(url, save_path):
client = socket.socket()
client.connect(("i02piccdn.sogoucdn.com", 80))
request = f"GET {url} HTTP/1.1\r\nHost: i02piccdn.sogoucdn.com\r\n\r\n"
client.send(request.encode())
response = b""
while True:
data = client.recv(1024)
if not data:
break
response += data
client.close()
headers, image_data = response.split(b"\r\n\r\n", 1)
content_length = int(re.findall(b"Content-Length: (.*?)\r\n", headers)[0])
while len(image_data) < content_length:
data = client.recv(1024)
if not data:
break
image_data += data
with open(save_path, "wb") as f:
f.write(image_data)
tp = input("请输入需要爬取的图片地址:")
download_image(tp, "kali.png")
```
这个优化版本主要做了以下几点改进:
1. 将代码封装在一个函数中,提高了代码的可复用性。
2. 使用 f-string 格式化字符串,使代码更加清晰易读。
3. 使用更加具有描述性的变量名。
4. 优化了接收数据的逻辑,使用一个循环接收数据,直到接收完整个图片数据。
5. 将图片保存的文件名作为参数传入函数中,使函数更加灵活。
阅读全文