如何批量下载一些网站上的压缩包或者图片
2018-01-23 16:12
465 查看
因为项目需要,我们需要从网上下载很多图片来做为数据集测试项目,经过一些研究,实现了批量下载ImageNet上的图片的程序在这里分享一个批量下载ImageNet图片的经验,其实这个例子适用于很多你知道下载资源命名规则的场合。举一个简单的例子,假如你需要从一个网站批量下载几个图片的压缩包,他们的命名是:1,2,3,4,5,6,7,8,9.那么你只需要在Http请求中对应的地方修改下载资源的命名就能从新下载了。那么实现批量下载呢,这里利用的是谷歌浏览器来实现的。
ImageNet是比较特殊的一个数据集网站,它有它自己的独特的命名方式(使用的),并且我们能下载到我们需要下载的资源包的名字,如果在其它网站下载东西的时候你不能直接得到的话,就需要爬取到这些名称(可以
使用集搜客等爬虫工具),或者是掌握他们的命名规律。
为了标识同义词,ImageNet使用WordNet3.0来对命名,他们使用"WordNet ID"来对(wnid)命名文件,这是wordNet
的POS和SYNSET OFFSET的级联,并且ImageNET只考虑名词,所以只要获取到同义词集合(synset)就能下载了,你需要下
载你想要的synset集合,详情请了解 点这里。下载所有synset与wordNetID的映射点这里,以及word'NetID和synset的映射
点这里。我们使用谷歌浏览器来下载,你需要找到你的谷歌浏览器的安装路径下的exe文件比如我的是:
C:/Users/someone/AppData/Local/Google/Chrome/Application/chrome.exe
只要安装了谷歌浏览器的都会有chrome.exe这个可执行文件,并且它在启动的时候有很多可选参数,你可以针对你的需要选择
Chrome.exe的参数选择请参照点这里,这里选择了两个参数:--process-per-tab --app 。
前者是使每个下载都会在新窗口中打开,第二个是使用默认的应用程序打开模式。因为下载的时候都是弹出一个窗口之后就关
闭,这样打开的话比较方便使用openMP并行加速。
详细的代码:
说明:代码中提到的ImageNet的关键词是上面提到的wordNetID连接中赋值放在里面的。openMP加速的操作
不懂的可以看看相关的文章:比如点这里。
ImageNet是比较特殊的一个数据集网站,它有它自己的独特的命名方式(使用的),并且我们能下载到我们需要下载的资源包的名字,如果在其它网站下载东西的时候你不能直接得到的话,就需要爬取到这些名称(可以
使用集搜客等爬虫工具),或者是掌握他们的命名规律。
为了标识同义词,ImageNet使用WordNet3.0来对命名,他们使用"WordNet ID"来对(wnid)命名文件,这是wordNet
的POS和SYNSET OFFSET的级联,并且ImageNET只考虑名词,所以只要获取到同义词集合(synset)就能下载了,你需要下
载你想要的synset集合,详情请了解 点这里。下载所有synset与wordNetID的映射点这里,以及word'NetID和synset的映射
点这里。我们使用谷歌浏览器来下载,你需要找到你的谷歌浏览器的安装路径下的exe文件比如我的是:
C:/Users/someone/AppData/Local/Google/Chrome/Application/chrome.exe
只要安装了谷歌浏览器的都会有chrome.exe这个可执行文件,并且它在启动的时候有很多可选参数,你可以针对你的需要选择
Chrome.exe的参数选择请参照点这里,这里选择了两个参数:--process-per-tab --app 。
前者是使每个下载都会在新窗口中打开,第二个是使用默认的应用程序打开模式。因为下载的时候都是弹出一个窗口之后就关
闭,这样打开的话比较方便使用openMP并行加速。
详细的代码:
#pragma once #ifndef MAIN #define MAIN #include <iostream> #include <fstream> #include <windows.h> #include <vector> #include <string> #include <omp.h> #include <io.h> int main(int argc, char** argv) { //文件 std::vector<std::string>files; std::ifstream infile("D:/ImageNet/ImageNet关键字.txt"); if (!infile) { std::cout << "打开文件错误" << std::endl; } while (!infile.eof()) { char info[200]; infile.getline(info, 200); files.push_back(std::string(info)); } char exe[] = "C:/Users/someone/AppData/Local/Google/Chrome/Application/chrome.exe --process-per-tab --app"; char searchPath[] = "D:/ImageNet"; int i = 0; #pragma omp parallel num_threads(5) private(i) shared(files) { #pragma omp for schedule(dynamic) //dynamic for (i = 0;i < files.size();i++) { char filesName[] = ""; sprintf(filesName, "%s/%s.tar", searchPath, files[i].c_str()); intptr_t info = 0; struct _finddata_t fileInfo; char url[] = ""; info = _findfirst(filesName, &fileInfo); if (info == -1L) { sprintf(url, "%s http://www.image-net.org/download/synset?wnid=%s&username=yourName&accesskey=yourKey&release=latest&src=stanford", exe, files[i].c_str()); WinExec(url, 0); } else { _findclose(info); continue; } while (1) { info = _findfirst(filesName, &fileInfo); if (info != -1L) { std::cout << "find" << std::endl; _findclose(info); break; } } } } system("pause"); return 0; } #endif // ! MAIN
说明:代码中提到的ImageNet的关键词是上面提到的wordNetID连接中赋值放在里面的。openMP加速的操作
不懂的可以看看相关的文章:比如点这里。
相关文章推荐
- linux下wget如何下载整个网站,或者特定目录全部文件
- linux下wget如何下载整个网站,或者特定目录全部文件
- 批量下载网站图片的Python实用小工具
- 如何将未提供保存的图片网站的图片下载下来
- 多级目录批量下载网站图片修订版,及改名方法
- 如何下载一些图片放到temp目录下的Imgs文件夹下
- FMX手机app,如何下载网站图片而不卡界面
- 如何破解一些网站防盗链,收费下载文件呢
- 如何下载网站后台的一些css,js等文件
- linux下wget如何下载整个网站,或者特定目录全部文件
- linux下wget如何下载整个网站,或者特定目录全部文件
- 如何下载一些网站的视频
- QT 如何实现使用 QPainter 的 drawPixmap() 函数将图片文件绘制到一个 QLabel、QPushButton 或者其他的一些设备上?
- 如何批量下载bing的背景图片?
- python批量下载兰科植物网站的图片,并重命名文件
- 网站制作技术分享--批量下载CSS中的图片
- 如何下载一些网站本身不希望你下载的文件呢
- 建站或者网站搬家换空间的时候,企业站长最关心的一个问题是该如何选择网站空间,而这一问题对于一些擅长的站长来说非常小意思,但对于部分企业站长来说是一个比较头疼的问题。根据不完整数据显示,很多企业站长因为
- 网络爬虫 -- 批量下载网站图片
- python抓取网站的图片并下载到本地