-
导入必要的模块:
python
import requests from bs4 import BeautifulSoup import os
这些模块是程序的核心部分:
requests
用于发送网络请求并获取响应。BeautifulSoup
用于解析HTML代码。os
用于与操作系统进行交互,例如创建文件夹。
-
设置请求头:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0' }
请求头是发送请求时的一部分,它们向服务器提供有关请求者的信息。这里,我们设置了浏览器的用户代理字符串,以便服务器认为我们的请求是由真实的浏览器发出的,而不是由脚本发出的。
-
获取搜索词:
sousuo = input('主人要看什么图片~:')
这行代码提示用户输入他们想要搜索的图片类型。用户的输入将存储在变量
sousuo
中。 -
获取目标网页:
url = 'https://www.duitang.com/search/?kw=' + sousuo + '&type=feed' response = requests.get(url, headers=headers) html = response.text # 从响应中提取文本内容
这部分代码首先构建了搜索图片的URL,然后使用
requests.get()
方法发送GET请求并获取响应。响应对象response
包含了请求的详细信息,包括响应体(即HTML内容)。通过访问response.text
,我们提取了HTML文本。 -
解析HTML代码:
soup = BeautifulSoup(html, 'html.parser') imgs = soup.find_all('img')
使用
BeautifulSoup
解析提取的HTML文本。soup.find_all('img')
获取HTML中所有的<img>
标签,这些标签通常包含图片的URL。 -
创建保存图片的文件夹:
folder = search if not os.path.exists(folder): os.makedirs(folder)
这部分代码检查是否已存在以搜索词命名的文件夹。如果不存在,则使用
os.makedirs()
创建一个新文件夹。 -
下载并保存图片:
for img in imgs: src = img.get('src') if src: src = "https:" + src if src.startswith("//") else src name = os.path.basename(src) img_data = requests.get(src, headers=headers).content with open(os.path.join(folder, name), 'wb') as f: f.write(img_data) print(f"下载完成: {name}")
这是一个循环,遍历所有找到的
<img>
标签。对于每个标签,我们执行以下操作:- 获取图片的
src
属性,它包含图片的URL。 - 如果URL以
//
开头,则将其转换为绝对URL。 - 使用
os.path.basename()
从URL中提取图片的名称。 - 使用
requests.get()
请求图片数据。 - 使用
with open()
保存图片数据到本地文件夹。 - 打印下载完成的信息
- 获取图片的
完整代码如下:
import requests
from bs4 import BeautifulSoup
import os
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
}
# 获取搜索词
sousuo = input('主人要看什么图片~:')
# 获取目标网页
url = 'https://www.duitang.com/search/?kw=' + sousuo + '&type=feed'
response = requests.get(url, headers=headers)
html = response.text # 从响应中提取文本内容
# 解析HTML代码
soup = BeautifulSoup(html, 'html.parser')
imgs = soup.find_all('img')
# 创建保存图片的文件夹
search = sousuo # 从HTML代码中提取搜索词
folder = search
if not os.path.exists(folder):
os.makedirs(folder)
# 下载并保存图片
for img in imgs:
src = img.get('src')
if src:
# 转换为绝对路径
src = "https:" + src if src.startswith("//") else src
# 获取图片名称
name = os.path.basename(src)
# 请求图片并保存
img_data = requests.get(src, headers=headers).content
with open(os.path.join(folder, name), 'wb') as f:
f.write(img_data)
print(f"下载完成: {name}")