Python 批量下载SIGMOD,VLDB的论文 Mac OS
因为一个个找带某一关键词的论文太累了,因此写了一个python脚本来下载论文,可以支持关键字寻找,批量下载。
目前只适合SIGMOD和VLDB。
需要下载bs4, requests模块。
实现
推荐一个网站https://dblp.org,收录了比较多的论文。
本python脚本就是爬取这个网站,获得某一年的SIGMOD/VLDB全部论文,然后对论文标题逐一进行关键词筛选做的。
0、要爬取的网站
假设我们要下载SIGMOD2019中带有privacy关键词的论文,我们从这个网站https://dblp.org/db/conf/sigmod/sigmod2019.html找到所有论文。任意点一篇进去,如Answering Multi-Dimensional Analytical Queries under Local Differential Privacy这篇文章,跳转到https://dl.acm.org/doi/10.1145/3299869.3319891里。
1、下载单篇论文
我们先来看如何用python脚本下载单篇论文,如果我们要下载SIGMOD的这篇论文https://dl.acm.org/doi/10.1145/3299869.3319891,
如图,右键网站上的“PDF”–“检查”,可以看到右边红色框内的pdf链接。点击链接会跳转到下面的网站https://dl.acm.org/doi/pdf/10.1145/3299869.3319891,就是我们要下载的论文地址。
如果我们知道了链接地址,可以直接用下面的代码下载(完整代码中放在函数download_one_paper.py
的get_paper(url, folder, filename)
了):
import requests
url= 'https://dl.acm.org/doi/pdf/10.1145/3299869.3319891'
r= requests.get(url)
with open('1.pdf', 'wb') as f:
f.write(r.content)
f.close()
2、获得所有论文的链接
可以通过链接下载论文了以后,我们需要考虑如果获得所有论文的链接。
网页https://dblp.org/db/conf/sigmod/sigmod2019.html正好提供了,SIGMOD论文下载地址都是如下图格式的。
我们可以用BeautifulSoup模块获得html的解析格式,再遍历如下格式的链接,获得所有论文地址。
如下是获取所有论文链接的代码(完整代码封装在download_papers.py
的get_paper_url_list(html)
函数中)
from bs4 import BeautifulSoup
import requests
def getHTMLText(url): # 固定格式,获得html的字符串形式
try:
r= requests.get(url, timeout=30)
r.raise_for_status()
r.encoding= r.apparent_encoding
return r.text
except:
return "getHTMLText error!"
html= getHTMLText('https://dblp.org/db/conf/sigmod/sigmod2019.html')
soup= BeautifulSoup(html, 'html.parser')
paper_url_list= []
for content in soup.find_all('a'): # 枚举html中所有的标签'a'
url= content.get('href') # 获得href里面的地址
if (url!=None) and (url[0