好在Xplore提供了导出文献列表的功能,如下图所示:
勾选所需的文献后,点击导出即会自动下载一个csv文件,保存有文献的相关信息,如:标题、年份、作者、文献链接等,如下图所示:
而文献链接为URL地址,打开后为PDF的浏览界面,PDF文件封装于一个
<iframe></iframe>
标签中。
基于以上的信息,可以设计如下的脚本逻辑:
采用Matlab实现,主要用到两个网络函数:
webread
和 websave
(于R2014b后引入,低于此版本的Matlab可以采用urlread
和 urlwrite
替代)webread(url)
输入参数为url地址,访问该地址并以字符串的形式返回html代码;websave(filename, url)
将url地址内容保存到本地并命名为filename。
以上逻辑描述如下:读取csv函数,提取出文献的链接以及文献相关信息;其中链接作为
webread
输入参数,调用后获得html内容,字符串提取出pdf的下载地址,然后通过websave
下载pdf文件;结合csv读取的文献信息为文献命名。注意事项
- 以上讨论基于具备IEEE Xplore访问权限的前提,一般校园网均具备;
- 在以文献标题作为文件名保存时需要注意通配符的问题,例如:“
\/:*?"<>|
”这些字符是无法存在于文件名中的,所以需要考虑将这些字符替换,比如替换为空格。可以通过正则表达式实现,Matlab中regexprep
可用; - 下载时最好设置相邻下载间的等待时间从而模拟人工操作避免被封IP,例如可以用:
pause(30 * rand() + 30)
模拟随机的等待时间。
代码
function DownloadPDFfromXplore(export, skip)
%% download pdf from IEEE EXplore export file
% if termites at any exception, we can restart and skip those downloaded
if nargin == 1
skip = 0;
end
[raw_numerical, raw_text, ~] = xlsread(export);
UrlList = raw_text(skip+3:end, 16);
NameList = raw_text(skip+3:end, 1);
YearList = raw_numerical(skip+1:end, 2);
pat = '[\\/:*?"<>|]';
NameList = regexprep(NameList, pat, ' ');
for k = 1 : length(NameList)
html = webread(UrlList{k});
first = strfind(html, '<iframe src="h');
last = strfind(html, '" frameborder=0>');
url = html(first+13:last-1);
disp(url)
filename = [num2str(YearList(k)) ' ' NameList{k} '.pdf'];
disp(filename)
websave(filename, url);
waitTime = 30 * rand() + 30;
pause(waitTime);
end
不过严格地说,英国大学和美国大学对这两个词的使用和定义很不一样,可以说正好相反:英国的博士论文一般都是Thesis,指有创见性的专著性论文,硕士论文是Dissertation.而在美国Dissertation表示最高一层的、深入的、有独创性的毕业论文,即博士论文。https://essaymin.com/cn/blog/american-essay-writing-service/
ReplyDelete我手动文本处理提取pdf文件地址,接着丢浏览器批量下载被封了。。。查到这个文章。。。原来matlab还能干这个事。。。
ReplyDelete哈哈,功能齐全
Delete