# 需要爬取一些需要的数据集,但是初次接触爬虫,所以没有头绪。
# 找到一篇博文提供了一个脚本方便linux环境下用户使用,在此对该脚本进行更改,以适用Windows用户。
# 本文附上脚本源码,以及所需参数如:url、PHPSESSID等的查找方法。
目录
1.为什要使用爬虫?
因为打开cityscape官网进行注册之后,发现是可以直接下载数据的,所以就思考,为什么可以直接下载了,还要用爬虫呢?事实上也是如此,尽管某些网站提供直接下载大文件的选项,但仍然存在一些情况,使用爬虫进行下载可能更为方便或者必要,以下是我总结的几点:
(1)下载速度问题:直接通过网页下载大文件可能会因为服务器带宽限制而导致下载速度较慢。使用爬虫可以通过多线程或者多进程等技术提高下载速度,从而更快地获取文件。
(2)断点续传和自动化: 一些网站可能不支持断点续传,如果下载过程中出现网络中断或其他问题,可能需要重新下载整个文件。而使用爬虫可以实现断点续传功能,从而节省时间和带宽资源。此外,通过编写脚本,可以实现自动化下载,无需手动点击下载按钮。
(3)程序化处理:爬虫可以将文件下载与后续的数据处理流程进行无缝连接,实现自动化处理流程。这在需要定期获取大量数据的情况下尤为重要。
(4)访问控制和限制:有些网站可能会对下载进行限制,例如需要登录、有下载配额限制、有验证码等。使用爬虫可以更灵活地处理这些访问控制和限制,从而更方便地获取所需数据。
(5)数据备份和镜像:有些网站提供的数据可能会因为各种原因不再提供或者删除,通过爬虫可以将数据备份到本地或者其他存储介质,保证数据的长期可用性。
2.Cityscapes数据简介
Cityscapes是一个用于语义理解和物体检测的大规模数据集,专门用于城市场景分析。该数据集由德国达姆施塔特大学的计算机视觉实验室(Computer Vision Lab)创建。Cityscapes数据集包含了来自各种城市的高分辨率图像,这些图像经过像素级别的标注,用于识别和分类城市场景中的各种物体,例如汽车、行人、道路、建筑物等。该数据集还提供了不同天气条件下的图像,如晴天、雨天和雪天,以及昼夜不同时间的图像,使得模型可以在各种环境条件下进行训练和测试。
Cityscapes数据集的主要特点包括:
(1)大规模和高分辨率:Cityscapes数据集包含了大量的高分辨率图像,每张图像的分辨率为1024x2048像素,这使得数据集可以用于训练和评估各种复杂的深度学习模型。
(2)像素级别标注:每张图像都进行了像素级别的标注,标注了各种物体和场景的类别信息,如汽车、行人、道路、建筑物等,以及这些物体的边界框信息。
(3)多样性的城市场景:Cityscapes数据集包含来自30个不同城市的图像,涵盖了各种不同的城市场景,包括城市中心、郊区、道路、公园等。
(4)不同环境条件下的图像:数据集提供了不同天气条件(晴天、雨天、雪天)和不同时间(昼夜)下的图像,使得模型可以更好地适应各种环境条件。
(5)用途广泛:Cityscapes数据集可用于多种计算机视觉任务,如语义分割、实例分割、物体检测等,是研究和开发城市场景理解相关算法的重要数据资源。
总的来说,Cityscapes数据集是一个用于城市场景理解和计算机视觉研究的重要资源,具有广泛的应用前景,包括自动驾驶、智能交通、城市规划等领域。
3.爬虫下载Cityscapes数据
3.1 爬虫脚本
import os
import requests
import contextlib
from tqdm import tqdm
# 定义一个函数`download`,用于下载文件
def download(url, session_id, save_path):
# 定义请求时所需的cookies和headers信息
cookies = {'PHPSESSID': session_id}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.5',
'Connection': 'keep-alive',
'Cookie': f'PHPSESSID={session_id}',
'DNT': '1',
'Host': 'www.cityscapes-dataset.com',
'Referer': 'https://www.cityscapes-dataset.com/downloads/',
'Upgrade-Insecure-Request': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/58.0.3029.110 Safari/537.3' }
# 检查文件是否已存在,并获取已下载的部分大小
start_pos = 0
if os.path.exists(save_path):
start_pos = os.path.getsize(save_path)
headers['Range'] = f'bytes={start_pos}-'
# 发送GET请求获取文件,并使用上下文管理器`contextlib.closing`来确保资源的正确释放
res = requests.get(url, headers=headers, cookies=cookies, stream=True)
with contextlib.closing(res) as r:
# 获取文件总大小
total_size = int(r.headers.get('content-length'))
# 打开文件,写入数据
with open(save_path, "wb") as f:
# 将已下载的部分大小赋值给accepts
accepts = start_pos
# 循环遍历响应内容,写入文件并输出下载进度:
with tqdm(total=total_size, initial=start_pos, unit='B', unit_scale=True, desc="Downloading", dynamic_ncols=True, leave=False, miniters=-1) as pbar:
for chunk in r.iter_content(chunk_size=4096):
if chunk:
f.write(chunk)
# 更新已接受的数据大小,并输出下载进度
accepts += len(chunk)
pbar.update(len(chunk))
# 调用并传入下载参数
download(
url='https://www.cityscapes-dataset.com/file-handling/?packageID=1',
session_id='4sh6mbguup2b8rhft4sk4n5cjq',
save_path='./gtFine_trainvaltset.zip'
3.2 下载参数的介绍以及查找方法
大部分情况下,大家的目标就是下载leftImg8bit_sequence_trainvaltest.zip这个300多G的数据集,但是我的电脑内存有限,为了给大家演示断点续传,这里选择下载一个较小的文件,但是查找参数的方法是类似的。save_path填写对应保存路径+文件名,以下是用Chrome浏览器的操作流程。
cityscapes数据集网址:Login – Cityscapes Dataset
3.2.1 查找url参数
(1)右键想要下载的数据链接,点击"检查"打开控制台。
(2)在控制台中找到url
当光标放在包含url的代码部分时,左侧数据集会以蓝色背景被选中,可以确认是否是自己所选的数据集。复制链接并替换上述脚本中最后的url参数。
url='https://www.cityscapes-dataset.com/file-handling/?packageID=1'
3.2.2 获取Cookies里的PHPSESSID参数
在控制台点击"Network(网络)",如果下面没有信息就刷新一下页面,单击"download/",找到来自www.cityscapes-dataset.com的请求,选择"Cookie"下的"value(值)",复制值的内容并替换上述脚本中最后的PHPSESSID参数。
session_id='4sh6mbguup2b8rhft4sk4n5cjq'
3.2.3 设置文件的输出路径
可以用相对路径,直接输出到脚本的根目录下:将./gtFine_trainvaltset.zip换成自己的数据集路径即可。
save_path='./gtFine_trainvaltset.zip'
最后,运行代码或者在python终端输入:python 脚本名.py 就可以啦。代码中设置了进度条显示数据下载的进程,以及断点之后续传的功能,在一个小文件中试了两次都没问题,如果下载大数据集不放心,可以提前试一下,确保脚本可以断点续传。进度条显示如下:
在最最后,特别声明,作为一名纯小白,渴望学习新知识,文章中可能出现理解不当的地方,若有所见解或异议可在下方评论,谢谢!!!一起进步吧!!!
引用及参考:
python爬虫下载cityscapes数据集_leftimg8bit_sequence_trainvaltest.zip-CSDN博客