前言
这个脚本能够从指定的网页上获取壁纸图片及其描述,并将它们保存到本地目录中。让我逐步解析这段代码的各个部分。
一:导入必要的库
import requests
import re
import os
这段代码导入了三个关键库:
– `requests`:用于发送HTTP请求和获取网页内容
– `re`:用于进行正则表达式匹配
– `os`:用于文件和目录操作
二:定义主函数
def download_wallpapers(url, save_dir):
这个函数接受两个参数:
– `url`:要爬取的网页地址
– `save_dir`:保存壁纸的本地目录
三:发送HTTP请求并获取网页内容
# 发送HTTP请求
response = requests.get(url)
html_content = response.text
这部分使用`requests.get()`方法发送GET请求到指定URL,并获取响应内容。
四:使用正则表达式提取信息
# 使用正则表达式查找所有图片URL及名称
img_pattern = r'<a href="(.*?)" id="changeTxt2"'
img_urls = re.findall(img_pattern, html_content)
name_pattern = r'作品描述:<h1>(.*?)</h1>'
img_name = re.findall(name_pattern, html_content)[0]
这里使用两个正则表达式:
– 第一个用于匹配图片URL
– 第二个用于匹配图片描述(作为文件名)
五:创建保存目录
# 创建保存目录
if not os.path.exists(save_dir):
os.makedirs(save_dir)
如果指定的保存目录不存在,这段代码会创建它。
六:下载并保存图片
# 下载图片
for img_url in img_urls:
if not img_url.startswith('http'):
img_url = url + img_url
# 确保文件名有.png后缀
if not img_name.lower().endswith('.png'):
img_name = img_name + '.png'
filename = os.path.join(save_dir, img_name)
try:
with open(filename, 'wb') as f:
img_data = requests.get(img_url).content
f.write(img_data)
print(f"Downloaded: {filename}")
except Exception as e:
print(f"Error downloading {img_url}: {str(e)}")
这个循环遍历所有找到的图片URL:
- 确保URL是完整的
- 构造完整的文件路径
- 尝试下载图片并保存到文件
- 打印成功或失败信息
- 如果图片没有后缀默认加一个
七:主程序调用
url = "https://www.bizhihui.com/p/16742.html" # 替换为您想爬取的网站URL
save_directory = "wallpapers" # 保存壁纸的目录
download_wallpapers(url, save_directory)
最后,这部分代码设置了目标URL和保存目录,然后调用`download_wallpapers`函数来执行爬虫任务。
整个代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/7/12 下午8:39
# [url=home.php?mod=space&uid=686208]@AuThor[/url] : 心中之火
# [url=home.php?mod=space&uid=267492]@file[/url] : 壁纸汇.py
# @Software: PyCharm
import requests
import re
import os
def download_wallpapers(url, save_dir):
# 发送HTTP请求
response = requests.get(url)
html_content = response.text
# print(html_content)
# 使用正则表达式查找所有图片URL及名称
img_pattern = r'<a href="(.*?)" id="changeTxt2"'
img_urls = re.findall(img_pattern, html_content)
name_pattern = r'作品描述:<h1>(.*?)</h1>'
img_name = re.findall(name_pattern, html_content)[0]
# 创建保存目录
if not os.path.exists(save_dir):
os.makedirs(save_dir)
# 下载图片
for img_url in img_urls:
if not img_url.startswith('http'):
img_url = url + img_url
# 确保文件名有.png后缀
if not img_name.lower().endswith('.png'):
img_name = img_name + '.png'
filename = os.path.join(save_dir, img_name)
try:
with open(filename, 'wb') as f:
img_data = requests.get(img_url).content
f.write(img_data)
print(f"Downloaded: {filename}")
except Exception as e:
print(f"Error downloading {img_url}: {str(e)}")
if __name__ == '__main__':
url = "https://www.bizhihui.com/p/16742.html" # 替换为您想爬取的网站URL
save_directory = "wallpapers" # 保存壁纸的目录
download_wallpapers(url, save_directory)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容