我出了如何使用MATLAB获取期刊《Cell》全部绘图,立马就有粉丝问《Nature》、《Sience》、《PNAS》啥的会不会安排,这期就给大家安排《Nature》全部绘图获取,之后其他期刊也会慢慢安排,但是不会一次性全出完(毕竟不能抓住一个主题就狠更)。
由于《Nature》绘图获取需要科学上网让自己位置变到美国,不然下载就会巨慢,因此建议直接去文末拿图像压缩包,每年的图像压缩包大约2G大小,搜集了近三年一万多张图。
杷虫代码也放一下叭,使用方法很简单,例如下载2022年图片,就命令行窗口运行getNaturePNGWhileTure(2022):
function getNaturePNGWhileTure(YEAR)
if nargin < 1
YEAR = 2023;
end
pbegin = 1; ibegin = 1; jbegin = 1;
forderName=['Year_',num2str(YEAR)];
if exist(['.\image_',forderName,'\pijbreak.mat'],'file')
load(['.\image_',forderName,'\pijbreak.mat']);
end
if ~exist(['.\image_',forderName],'dir')
mkdir(['.\image_',forderName]);
end
disp([pbegin,ibegin,jbegin])
url_full = 'https://www.nature.com/nature/research-articles?searchType=journalSearch&sort=PubDate&year=<Y/>&page=<P/>';
url_year = strrep(url_full,'<Y/>',num2str(YEAR));
options=weboptions('Timeout',inf);
html_year = webread(strrep(url_year,'<P/>','1'),options);fprintf('1->')
A_page_num = strfind(html_year,'u-visually-hidden');
Z_page_num = strfind(html_year,'data-page="next"');
page_num = html_year(A_page_num(find(A_page_num<Z_page_num,1,'last')):Z_page_num);
page_num = page_num(32:36);
page_num = str2double(page_num(abs(page_num)<=57&abs(page_num)>=48));
for p = pbegin:page_num
url_page = strrep(url_year,'<P/>',num2str(p));
html_page = webread(url_page,options);fprintf('2\n')
A_html_artical = strfind(html_page,'itemprop="name headline"');
Z_html_artical = strfind(html_page,'data-track-action="view article"');
for i = ibegin:length(Z_html_artical)
html_artical = html_page(A_html_artical(find(A_html_artical<Z_html_artical(i),1,'last')):Z_html_artical(i));
A_artical = strfind(html_artical,'<a href=');
Z_artical = strfind(html_artical,'class="c-card__link u-link-inherit"');
html_artical = html_artical(A_artical(1)+10:Z_artical);
html_artical = html_artical(1:find(html_artical=='"')-1);
for j = jbegin:50
pbegin = p; ibegin = i ; jbegin = j;
save(['.\image_',forderName,'\pijbreak.mat'],'pbegin','ibegin','jbegin')
html_png=webread(['https://www.nature.com/',html_artical,'/figures/',num2str(j)]);
A_png = strfind(html_png,'aria-describedby');
Z_png = strfind(html_png,'alt="Fig.');
if isempty(Z_png)
break;
else
url_png = html_png(A_png:Z_png(find(Z_png>A_png,1)));
url_png = ['https:',url_png(strfind(url_png,'src="')+5:end-3)];
url_png = strrep(url_png,'lw685','full');
name_png = ['.\image_',forderName,'\',html_artical(10:end),' P',num2str(j)];
websave(name_png,url_png,options);
disp(['Downloading Year-',num2str(YEAR),...
' Page-',num2str(p),' Artical-',num2str(i),...
' Pic-',num2str(j),':',html_artical])
end
end
jbegin = 1;
end
ibegin = 1;
end
end
由于很多文章使用学校信息或者单位信息登录后才能获得Open Access
,为了让MATLAB绕过该限制,采用了猜出每张图在图库内的显示页面并每张图单独获取一次链接的方式,因此下载速度不会太快,可能两三秒才能下载一张图,再次建议直接去文末网盘下载已经下好的压缩包。
代码设置了可断点下载,就是可以下载了一半中断程序后过段时间接着下。
同时如果有的时候看到一张图非常好想找找源文章读一读,此代码下载的图像名称就标注了图像的来源,比如: 对下图五子棋论文很感兴趣:
看到文章编号为s41586-023-06124-2,就可以直接在浏览器输入文章链接:
- https://www.nature.com/articles/s41586-023-06124-2
可以轻松找到原论文:
部分图像展示
2023
2022
2021
关注我比较久的粉丝可能对这张图比较眼熟:
没错这就是我写的绘图复刻系列文章的第二篇复刻的原图哈,我复刻效果长这个样子:
是不是一模一样!想瞅瞅的可自行在主页搜索:
- MATLAB | 绘图复刻(二) | 折线图+误差棒+柱状图+散点抖动+灰色背景+图片叠加
这篇文章哈,绘图复刻系列也会继续做下去,大家在这篇提供的图像中如果遇到了一些比较好看且有趣的图,也可以发一下图像编号问我哈,如果有时间有机会会考虑出推送的!
图像获取
百度网盘
提供近三年来图片百度网盘链接,其中2023年目前为止共2232张,2022年共4509张,2021年共3727张,共计一万余张:
2023(1.34G-2232张)
链接:
https://pan.baidu.com/s/1pE-34BXmX7HPYAHiQ5SZ-w?pwd=slan
提取码:slan
2022(2.78G-4509张)
链接:
https://pan.baidu.com/s/1fIbM92eK5Q3rgS3x8h6QjA?pwd=slan
提取码:slan
2021(1.85G-3727张)
链接:
https://pan.baidu.com/s/1bQCj7vBgTCrNx4WprmCjbg?pwd=slan
提取码:slan
gitee仓库
若网盘失效,可去gitee仓库获取最新网盘链接:
https://gitee.com/slandarer/nature-figures