从站长素材网站爬取风景图片时,你可以按照以下详细步骤进行操作:
导入必要的库
首先,确保你已经安装了所需的库:os、urllib.request 和 lxml
import o
import urllib.request
from lxml import etree
创建请求对象
定义一个函数 create_request(),它将接受一个整数参数 page,代表页面编号。这个函数会根据页面编号构建请求对象,包括URL和请求头信息。
def create_request(page: int):
"""
请求对象定制
def create_request(page: int):
"""
请求对象定制
:param page:页码
:return:请求对象定制的结果
"""
# 访问地址
if page == 1:
url = 'https://sc.chinaz.com/tupian/fengjing.html'#换成你想要的图片地址
else:
url = f"https://sc.chinaz.com/tupian/fengjing_{page}.html"#需观察切换页码是url的变化
# 请求头
headers = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0)'
}
return urllib.request.Request(url=url, headers=headers)
获取网页源码
定义一个函数 get_content(),它将接受一个请求对象作为参数,并返回网页的源码。
def get_content(request):
"""
获取网页源码
:param request: 请求对象定制的结果
:return: 获取的网页源码
"""
response = urllib.request.urlopen(request)
content = response.read().decode('UTF-8')
return content
下载图片
定义一个函数 download_images(),它将接受网页的源码和一个文件夹名称作为参数,然后从源码中提取图片链接,并将图片下载到指定的文件夹中。
def download_images(content, folder_name):
"""
下载图片到指定文件夹
:param content: 网页源码
:param folder_name: 文件夹名称
"""
if not os.path.exists(folder_name):
os.makedirs(folder_name)
# 创建文件夹
tree = etree.HTML(content) src_list = tree.xpath('//img/@data-original')
# 获取图片地址,换成你想要的图片地址
name_list = tree.xpath("//a[@class='name']/@title")
# 获取图片名,换成你想要的图片地址
for name, src in zip(name_list, src_list):
url = 'https:' + src
file_path = os.path.join(folder_name, name + '.jpg')
urllib.request.urlretrieve(url, file_path)
主程序
在主程序中,用户输入起始页码和结束页码,然后循环遍历这些页面,调用前面定义的函数来执行爬取和下载操作。
if __name__ == '__main__': start_page = int(input('请输入起始页码'))
end_page = int(input("请输入结束页码"))
folder_name = "fish_pictures" # 新建文件夹名称为 "fish_pictures"
for page in range(start_page, end_page + 1):
# (1)请求对象定制
request = create_request(page)
# (2)获取网页源码
content = get_content(request)
# (3)下载图片到指定文件夹
download_images(content, folder_name) print("图片已保存在名为 'fish_pictures' 的文件夹中。")
完整代码:
import os import urllib.request from lxml import etree def create_request(page: int):
"""
请求对象定制 :param page:页码 :return:请求对象定制的结果
"""
# 访问地址 if page == 1: url = 'https://sc.chinaz.com/tupian/fengjing.html'
else: url = f"https://sc.chinaz.com/tupian/fengjing_{page}.html"
# 请求头 headers = { 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 5.1; Trident/4.0; Hot Lingo 2.0)' } return urllib.request.Request(url=url, headers=headers) def get_content(request):
"""
获取网页源码 :param request: 请求对象定制的结果 :return: 获取的网页源码
"""
response = urllib.request.urlopen(request) content = response.read().decode('UTF-8') return content def download_images(content, folder_name):
"""
下载图片到指定文件夹 :param content: 网页源码 :param folder_name: 文件夹名称
""
if not os.path.exists(folder_name): os.makedirs(folder_name)
# 创建文件夹 tree = etree.HTML(content) src_list = tree.xpath('//img/@data-original')
# 获取图片地址 name_list = tree.xpath("//a[@class='name']/@title")
# 获取图片名 for name, src in zip(name_list, src_list): url = 'https:' + src file_path = os.path.join(folder_name, name + '.jpg') urllib.request.urlretrieve(url, file_path) if __name__ == '__main__': start_page = int(input('请输入起始页码')) end_page = int(input("请输入结束页码")) folder_name = "fish_pictures"
# 新建文件夹名称为 "fish_pictures" for page in range(start_page, end_page + 1): # (1)请求对象定制 request = create_request(page)
# (2)获取网页源码 content = get_content(request)
# (3)下载图片到指定文件夹 download_images(content, folder_name) print("图片已保存在名为 'fish_pictures' 的文件夹中。")
© 版权声明
THE END
暂无评论内容