重新优化直至可以爬取网站图片
时间: 2023-12-07 10:05:43 浏览: 27
以下是针对你的代码进一步优化后的版本,可以爬取网站图片:
```python
import socket
import 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(4096)
if not data:
break
response += data
client.close()
headers, image_data = response.split(b"\r\n\r\n", 1)
content_length_match = re.search(b"Content-Length: (\d+)", headers)
if content_length_match:
content_length = int(content_length_match.group(1))
while len(image_data) < content_length:
data = client.recv(4096)
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. 增加了对 Content-Length 的正则匹配,确保获取到正确的图片数据长度。
2. 增加了更大的接收缓冲区大小,以便处理大尺寸图片。
3. 使用 `re.search` 替换了 `re.findall`,只获取第一个匹配结果。
4. 在接收数据时增加了判断条件,确保接收到完整的图片数据。
5. 使用了更具描述性的变量名。
请注意,此代码仅适用于特定的网站和图片地址,如果要爬取其他网站的图片,可能需要进行相应的调整。