这里写自定义目录标题

  • Python 批量下载SIGMOD,VLDB的论文 Mac OS
    • 实现
      • 0、要爬取的网站
      • 1、下载单篇论文
      • 2、获得所有论文的链接
    • 完整代码

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.pyget_paper(url, folder, filename)了):

import requestsurl= '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.pyget_paper_url_list(html)函数中)

from bs4 import BeautifulSoup
import requestsdef getHTMLText(url): # 固定格式,获得html的字符串形式try:r= requests.get(url, timeout=30)r.raise_for_status()r.encoding= r.apparent_encodingreturn r.textexcept: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:16]=='https://doi.org/'):paper_url_list.append(url)
paper_url_list= list(set(paper_url_list)) # 去重
for url in paper_url_list:print(url)

完整代码

包括两个文件download_one_paper.pydownload_papers.py,第一个文件用来下载一篇论文,第二个文件获得所有论文链接后调用第一个文件下载论文。
用的时候直接:

$ python download_papers.py

在github上有相应代码https://github.com/VFVrPQ/Python_Real_Learning/tree/master/download_paper
另外第一个文件中增加了获得论文标题,和下载后的文件名。

# download_one_paper.py
import requests
import os
from bs4 import BeautifulSoup# 关键词
TITLE_SHAI= ['privacy', 'private', 'differential', 'local', 'location', 'crowd', 'spatial']def get_paper(url, folder, filename):'''下载单篇论文:param url: 要下载的论文url:param folder: 保存在本地的路径:param filename: 保存在本地的文件名'''#try:if not os.path.exists(folder): # 若文件夹不存在,则创建os.mkdir(folder)path= folder + '/' + filenameif not os.path.exists(path): # 若文件不存在,则创建r= requests.get(url)with open(path, 'wb') as f:f.write(r.content)f.close()print("%s文件保存成功" % (filename))else:print("%s文件已存在" % (filename))#except:#    print("%s:爬取失败" % (url))def getHTMLText(url):try:r= requests.get(url, timeout=30)r.raise_for_status()r.encoding= r.apparent_encodingreturn r.textexcept:return "getHTMLText error!"def get_paper_name(html):'''获取论文标题,根据论文标题关键词筛选'''soup= BeautifulSoup(html, 'html.parser')title=''for content in soup.find('h1'):title=str(content)title= title.replace(':', '-') # 将标题中的冒号改为-for shai in TITLE_SHAI: # 根据关键字筛选if shai in title.lower():return True, titlereturn False, title  def get_pdf_url(html):'''获得pdf的链接'''soup= BeautifulSoup(html, 'html.parser')for link in soup.find_all('a'): ## <a class="btn big stretched red" href="/doi/pdf/10.1145/3299869.3319891" title="View or Download as a PDF file"><i aria-hidden="true" class="icon-pdf-file"></i>PDF</a>url= link.get('href')if (url!=None) and (url[0:9]=='/doi/pdf/'): # SIGMODreturn 'https://dl.acm.org'+link.get('href')if (url!=None) and (url[0:38]=='https://link.springer.com/content/pdf/'): # VLDBreturn urlreturn None def download_one_paper(url, year, typ, conf):'''获得下载url,和论文名字(根据论文名字关键词筛选),下载单篇论文:param url: :param year: 出版年份:param typ: ccf认证类别:param conf: 会议名'''print(url)html= getHTMLText(url)#print(html.prettify())like, papername= get_paper_name(html)if like==False:print('没有关键字: %s' % (papername))return pdf_url= get_pdf_url(html)get_paper(url=pdf_url, folder='./paper', filename=year+'-'+typ+'-'+conf+'-'+papername+'.pdf')if __name__ == "__main__":#print(len('https://link.springer.com/content/pdf/'))download_one_paper('https://dl.acm.org/doi/10.1145/3299869.3319891', '2019', 'A', 'SIGMOD')#download_one_paper('https://link.springer.com/article/10.1007/s00778-019-00568-7', '2020', 'A', 'VLDB')#download_one_paper('https://ieeexplore.ieee.org/document/9155359', '2020', 'A', 'INFOCOM') # failure
# download_papers.py
import requests
import os
from bs4 import BeautifulSoup
# 本地导入
from download_one_paper import getHTMLText, download_one_paperdef get_paper_url_list(html):'''获取所有论文的下载地址'''paper_url_list= []soup= BeautifulSoup(html, 'html.parser')for content in soup.find_all('a'):url= content.get('href')if (url!=None) and (url[0:16]=='https://doi.org/'):paper_url_list.append(url)paper_url_list= list(set(paper_url_list)) # 去重return paper_url_listif __name__ == "__main__":conf_list=[{'url':'https://dblp.org/db/journals/vldb/vldb29.html','year':'2020','typ':'A','conf':'VLDB'},{'url':'https://dblp.org/db/journals/vldb/vldb28.html','year':'2019','typ':'A','conf':'VLDB'},'''{'url':'https://dblp.org/db/conf/sigmod/sigmod2019.html','year':'2019','typ':'A','conf':'SIGMOD'}''']for conf in conf_list:conf_url= conf['url'] # 获取会议的网站html= getHTMLText(conf_url)paper_url_list= get_paper_url_list(html) # 获取所有论文的下载地址totnum_list= len(paper_url_list)for i in range(len(paper_url_list)):print('\ndealing with %d/%d=%f%%' % (i+1, totnum_list, 100.0*(i+1)/totnum_list)) # 用来观察进度paper_url= paper_url_list[i] # paper_url= 'https://doi.org/10.1145/3299869.3314037'download_one_paper(paper_url, conf['year'], conf['typ'], conf['conf'])

Python 批量下载SIGMOD,VLDB的论文 Mac OS相关推荐

  1. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  2. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 顶...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  3. python 批量下载知网(CNKI)论文

    1.目的: 朋友找我去知网帮他下载点相关论文,发现老是要去点击文章.点击下载,显得很麻烦,百度一下,别人的方法太复杂,所以自己写了一个python脚本自动下载知网论文. 2.前期准备 1)安装pyth ...

  4. python批量下载b站_python 批量下载bilibili视频的gui程序

    运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...

  5. python怎么批量下载年报_使用Python批量下载Wind数据库中的PDF报告

    原标题:使用Python批量下载Wind数据库中的PDF报告 背景 最近小编出于工作需要,准备在Wind金融数据终端批量下载上市公司2019年第一季度业绩预告.通过相关的条件检索,发现其相关数据有近百 ...

  6. python批量下载bilibili视频_python 批量下载bilibili视频的gui程序

    运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...

  7. python下载网页里面所有的图片-Python批量下载网页图片详细教程

    很多朋友在网上查找批量下载图片的方法~发觉挺凌乱的,无从下手.这里绿茶小编就来跟大家分享下使用Python批量下载图片方法. 目标:爬取某个网站上n多页的链接,每个链接有n多张图片,每一页对应一个文件 ...

  8. 群里又会python的吗_自从会了Python在群里斗图就没输过,Python批量下载表情包!...

    原标题:自从会了Python在群里斗图就没输过,Python批量下载表情包! 导语 最近图慌,于是随便写了个表情包批量下载的脚本,没什么技术含量,纯娱乐性质. 让我们愉快地开始吧~ 开发工具 Pyth ...

  9. 教你怎么使用python批量下载图片

    教你怎么使用python批量下载图片 文章目录 教你怎么使用python批量下载图片 前言 一.运行环境 1. win10 2. python==3.7.2 二.需要用到的参数 1. download ...

最新文章

  1. Docker中的“公开”和“发布”有什么区别?
  2. 黑暗城堡 最短路径生成树
  3. 区块链BaaS云服务(29) 溪塔科技 CITA-Cloud
  4. linux怎么把磁盘的东西拷贝,[Linux]如何拷贝已有数据磁盘,并将新的磁盘挂接到其他虚机上...
  5. Excel 公式 ・快捷键 ------- 不定期更新
  6. GitLab non-standard SSH port
  7. Perl语言程序设计_简介
  8. CCS软件安装教程(超级详细)
  9. WebStorm配置Sass
  10. java 硬盘序列号_如何使用Java获取硬盘序列号?
  11. 联想IBM笔记本驱动
  12. 【高等数学】第 5 讲 偏导数
  13. PDF文件中的文字怎么修改?来试试这种修改方法
  14. DialogFragment的OnDismissListener
  15. 智慧城市投入与产出相关分析预评估模型研究
  16. 鸿合一体机触屏没反应怎么办_一体机电脑触摸屏没反应怎么办 触摸屏一体机故障解决方法...
  17. 除中国中医药数据库官网外-必备5个其它常用中国中医药数据库
  18. python网易云_python下载网易云音乐
  19. 遇见狂神书说:JavaWeb保姆级教程
  20. 自学用——html+css(要点)

热门文章

  1. 嵌入式软件工程师自学之路
  2. Win7 64b的VS2015 如何使用nmake成功编译detour express 3.0-error2202 警告被视为错误 - 没有生成“object”文件
  3. 金融初学者的感受:兴趣的魔力
  4. NLog NETCore 3.0 Porting
  5. speedoffice使用方法-word怎么添加边框
  6. 自动铅笔的简笔画怎么画,自动化简笔画图片大全
  7. 通过键盘移动鼠标光标 autohotkey
  8. MLX90640开发笔记(六)红外图像伪彩色编码
  9. win10系统安装到服务器失败,win10安装失败怎么办?
  10. 苹果手机充电口接触不良怎么办_苹果连充电口都要干掉?