分享一个从IEEE Xplore上批量下载会议论文的方法_ieee xplore 脚本-程序员宅基地

技术标签: Shell  ubuntu  IEEE  

博客地址

标签(空格分隔): IEEE Xplore, bash

测试环境:Ubuntu 15.04, 中山大学

首先,从下载一篇论文开始,在IEEE Xplore上任意下载一篇论文,获取下载链接, 如:

http://ieeexplore.ieee.org/ielx7/6875427/6877223/06877226.pdf?tp=&arnumber=6877226&isnumber=6877223

截取?前面部分:

http://ieeexplore.ieee.org/ielx7/6875427/6877223/06877226.pdf

然后,Linux上使用wget命令可以快速地从指定URL下载文件(后面也是使用这个命令来实现批量下载),

此处输入图片的描述

一篇论文就这么下载了,所以,要实现批量下载,必须要获取所有论文的下载URL,其实,多下载几篇论文比较下它们的下载链接就可以发现:

http://ieeexplore.ieee.org/ielx7/6875427/6877223/06877326.pdf?tp=&arnumber=6877326&isnumber=6877223
http://ieeexplore.ieee.org/ielx7/6875427/6877223/06877325.pdf?tp=&arnumber=6877325&isnumber=6877223
http://ieeexplore.ieee.org/ielx7/6875427/6877223/06877324.pdf?tp=&arnumber=6877324&isnumber=6877223

下载链接的格式如下,(前两串数字即“6875427”和“6877223”对于同一个会议都是相同的,所以只需要获取一次就可以了):

http://ieeexplore.ieee.org/ielx7/6875427/6877223/0{arnumber}.pdf

所以,可以将下载链接分为两个部分, 注意arnumber前面有多了一个0

http://ieeexplore.ieee.org/ielx7/6875427/6877223/ 和 0{arnumber}.pdf

问题就变成,如何获取所有论文的arnumber了,这个方法就有两种,一种可以使用爬虫,解析网页获取,但是写代码来比较麻烦,这里使用另外一种,IEEE Xplore提供了一个Download Citations的功能,如图:

此处输入图片的描述

下载后保存至文件,

Thangavel, M.; Chandrasekaran, M.; Madheswaran, M., "Analysis of B-mode transverse ultrasound common carotid artery images using contour tracking by particle filtering technique," in Devices, Circuits and Systems (ICDCS), 2012 International Conference on , vol., no., pp.470-473, 15-16 March 2012
doi: 10.1109/ICDCSyst.2012.6188759
keywords: {biodiffusion;biomedical ultrasonics;blood vessels;cardiovascular system;diseases;filters;image denoising;image segmentation;medical image processing;particle filtering (numerical methods);speckle;ultrasonic imaging;B-mode transverse ultrasound common carotid artery images;atherosclerosis;cardiovascular diseases;contour tracking;edge preserving anisotropic diffusion filter;image segmentation;medical image analysis;particle filtering technique;speckle noises;speckle reduction;Fitting;Image segmentation;Image Segmentation;Medical imaging;Particle filtering;Ultrasound image},
URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6188759&isnumber=6188639

其中包含了每一篇论文的信息,包括标题(可以用来文件命名),关键字,URL等信息,其中的URL并不能直接用来wget下载论文,但是包含了我们要获取的arnumber信息,好了~接下来要做的就是从这些信息里面抽取arnumber和论文标题了

观察下载后的Citations信息,发现论文标题都包含在双引号之间,即“”标题””这样,arnumber即“arnumber=6188759”,那就用正则表达式来匹配吧,看命令:

cat {citations file} | grep -o -e "arnumber=[0-9]*" -e '"[^\"]*"' >> "{save file}"

实现了从刚才下载的索引文件里抽取出论文标题arnumber信息,并保存至另外一个文件的功能,其中有两个正则表达式, 分别用来匹配arnumber和论文标题,得到的信息如下:

"Algorithm Engineering for Scalable Parallel External Sorting,"
arnumber=6012805
"Power-Aware Replica Placement and Update Strategies in Tree Networks,"
arnumber=6012820
"Minimum Cost Resource Allocation for Meeting Job Requirements,"
arnumber=6012821

每两行代表一篇论文的标题和arnumber,然后就好办了,进行Shell编程, 循环读取以上的信息,使用arnumber去下载,然后用论文标题作为文件名保存,那么,如何读取呢~

#!/bin/bash
base="http://ieeexplore.ieee.org/ielx7/6875427/6877223/"
file="文件名.txt"
while read -r title; read -r arnumber
do 
  title=`echo $title | cut -d "\"" -f 2 | cut -d "," -f 1 | sed 's/\///'` #获取title
  arnumber=`echo $arnumber | cut -d "=" -f 2` #获取arnumber
  wget "$base/0$arnumber.pdf" #下载
  mv "0$arnumber.pdf" "$title.pdf" #用标题来作为文件名保存
done < "$file"

保存为download.sh, 给予它执行的权限:

sudo chmod +x download.sh

然后./download.sh就可以运行了,等待程序运行完就ok了~

上面还用到了两个命令, cut 主要用来截取部分字符串, sed用来去除标题中的斜杠,因为斜杠不能出现在文件名中~具体用法不说了

亲测,ICDCS 2012, IPDPS 2012-2015 可用~

此处输入图片的描述

附上我的完整程序:

#!/bin/bash

base=
file=
tempfile1="downlist.txt" #临时文件,用完删除
tempfile2="urls.txt" #临时文件,用完删除

if [ -f $tempfile1 ]; then
    rm $tempfile1
fi

if [ -f $tempfile2 ]; then
    rm $tempfile2
fi

usage()
{
    echo "Usage: `basename $0` -b url_base_string -f input_file [-h help]"
    exit 1
}

while getopts "b:f:h" arg #选项后面的冒号表示该选项需要参数
do
    case $arg in
         b)
            base=$OPTARG
            ;;
         f)
            file=$OPTARG
            ;;
         h)
            usage
            ;;
         ?)  #当有不认识的选项的时候arg为?
        echo "unkonw argument"
    exit 1
    ;;
    esac
done

if [ -z "$base" ]; then   #该脚本必须提供-b选项
    echo "You must specify base with -b option"
    exit
fi

if [ -z "$file" ]; then   #该脚本必须提供-f选项
    echo "You must specify file with -f option"
    exit
fi

cat $file | grep -o -e "arnumber=[0-9]*" -e '"[^\"]*"' >> "$tempfile1"

while read -r title; read -r arnumber #循环读取标题和arnumber
do 
  title=`echo $title | cut -d "\"" -f 2 | cut -d "," -f 1 | sed 's/\///'`
  arnumber=`echo $arnumber | cut -d "=" -f 2`
  echo "$base/0$arnumber.pdf" >> "$tempfile2" #这里先生成所有下载链接,然后保存到临时文件
done < "$tempfile1"

wget -i $tempfile2 #批量下载论文

echo $?

while read -r title; read -r arnumber #重命名
do 
  title=`echo $title | cut -d "\"" -f 2 | cut -d "," -f 1 | sed 's/\///'`
  arnumber=`echo $arnumber | cut -d "=" -f 2`
  mv "0$arnumber.pdf" "$title.pdf"
done < "$tempfile1"

if [ -f $tempfile1 ]; then
    rm $tempfile1
fi

if [ -f $tempfile2 ]; then
    rm $tempfile2
fi

用法:./download.sh -b {base url, 需自行获取} -f {从IEEE Xplore上下载的Citations文件}

./download.sh -b http://ieeexplore.ieee.org/ielx5/6180033/6188639 -f downloadCitations.txt

有需要可以问我,嗯~@maxuan

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ubooksapp/article/details/49518009

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签