精华内容
下载资源
问答
  • 利用Python自制批量下载文献程序

    千次阅读 2020-12-12 10:42:22
    批量下载文献1、导入库2、打开网站并设置网页初始选项3、关键词搜索4、选择下载格式及批量下载到几页5、开始批量下载 打包后的PyCNKi.exe程序同步佐佑思维公众号二维码如下: 1、导入库 from selenium import ...

    1、导入库

    from selenium import webdriver
    from selenium.webdriver import ChromeOptions
    from selenium.webdriver.chrome.options import Options
    import openpyxl
    import re
    import time
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support.select import Select
    import urllib.error
    

    2、打开网站并设置网页初始选项

    def wu_visual():
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        return chrome_options
    
    def fan_jiance():
        option = ChromeOptions()
        option.add_experimental_option('excludeSwitches', ['enable-automation'])
        #option.add_argument('-kiosk')
        return option
    def url_error_test(url,bro):
        try:
            bro.get(url)
            print("OK")
        except urllib.error.HTTPError as e:
            print(e.code)
            print(e.reason)
        except urllib.error.URLError as e:
            print(e.reason)
        return e.reason
    
    chrome_options=wu_visual()
    option=fan_jiance()
    chrome_path =r'./chromedriver.exe'
    bro = webdriver.Chrome(executable_path=chrome_path,chrome_options=chrome_options,options=option)
    
    #用火狐的朋友可以把下一行代码的“#”去掉即可
    #bro = webdriver.Firefox() 
    
    bro.maximize_window() #最大化
    url = r'http://kns.cnki.net' #网址
    bro.get(url)
    

    3、关键词搜索

    #模拟输入关键字查询
    #请选择您需要使用的查询方式,本代码只提供标题查询
    input_title = bro.find_element_by_id("txt_SearchText")
    input_title.click()
    time.sleep(2)
    key_value = input("请输入你要下载的论文标题:")
    
    input_title.send_keys(key_value)
    #点击搜索
    div_search = bro.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[1]/input[2]')
    div_search.click()
    time.sleep(1)
    #点击期刊论文
    default_1=20
    bro.find_element_by_xpath("/html/body/div[5]/div[1]/div/ul[1]/li[1]/a/span").click()
    time.sleep(10)
    total_num = bro.find_element_by_xpath("/html/body/div[5]/div[1]/div/ul[1]/li[1]/a/em")
    if int(total_num.text)<=default_1:
        print("一共搜索到"+total_num.text+"条结果")
        print("共一页")
    else:
        print("一共搜索到" + total_num.text + "条结果")
        total_page =bro.find_element_by_xpath('//*[@id="gridTable"]/div[2]/span[1]')
        print(total_page.text)
        num =int(total_page.text[1:-1])
    

    4、选择下载格式及批量下载到几页

    print("1:PDF格式\n2:CAJ格式\n请输入下载文件的格式对应数字:")
    load_num = int(input("请输入1 or 2:"))
    
    print("请输入您要下载到第几页码:")
    

    5、开始批量下载

    load_page = int(input())
    while load_page>num or load_page<=0:
        print("输入页码错误,请重新输入:")
        load_page = int(input("请输入1 or 2:"))
    bro_new = webdriver.Chrome(executable_path=chrome_path, chrome_options=chrome_options,options=option)
    if int(total_num.text)<=default_1:
        url_link = bro.find_elements_by_xpath('//*[@id="gridTable"]/table/tbody/tr/td[2]/a')
        for link_1 in url_link:
            count=1
            link = url + r'/kcms/detail/detail.aspx?' + link_1.get_attribute("href")[20:]
            bro_new = webdriver.Chrome(executable_path=chrome_path,chrome_options=chrome_options,options=option)
            bro_new.get(link)
            bro_new.maximize_window()
            # print("编号为"+str(count)+"的论文:"+bro_new.find_element_by_xpath("/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[1]/h1").text+"————正在下载")
            time.sleep(10)
            if bro_new.find_element_by_xpath('/html/body/div[2]/div').text == "URL参数错误":
                print("编号为"+str(count)+"的论文:"+bro_new.find_element_by_xpath("/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[1]/h1").text+"————论文下载失败")
                bro_new.quit()
                count += 1
                continue
            if load_num == 1:
                bro_new.find_element_by_id('pdfDown').click()
                time.sleep(10)
                print("编号为" + str(count) + "的论文:" + bro_new.find_element_by_xpath("/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[1]/h1").text + "————下载成功")
                count += 1
                bro_new.quit()
            if load_num == 2:
                bro_new.find_element_by_id('cajDown').click()
                time.sleep(10)
                print("编号为" + str(count) + "的论文:" + bro_new.find_element_by_xpath("/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[1]/h1").text + "————下载成功")
                count += 1
                bro_new.quit()
    else:
        for ii in range(0,load_page):
            count=1
            url_link = bro.find_elements_by_xpath('//*[@id="gridTable"]/table/tbody/tr/td[2]/a')
            for link_1 in url_link:
                link = url + r'/kcms/detail/detail.aspx?' + link_1.get_attribute("href")[20:]
                bro_new = webdriver.Chrome(executable_path=chrome_path,chrome_options=chrome_options,options=option)
                bro_new.get(link)
                bro_new.maximize_window()
                time.sleep(10)
                if bro_new.find_element_by_xpath('/html/body/div[2]/div').text == "URL参数错误":
                    bro_new.quit()
                    print("编号为" + str(count) + "的论文:" + bro_new.find_element_by_xpath("/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[1]/h1").text + "————论文下载失败")
                    bro_new.quit()
                    count += 1
                    continue
                if load_num == 1:
                    bro_new.find_element_by_name('pdfDown').click()
                    time.sleep(10)
                    print("编号为" + str(count) + "的论文:" + bro_new.find_element_by_xpath("/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[1]/h1").text + "————下载成功")
                    count += 1
                    bro_new.quit()
                if load_num == 2:
                    bro_new.find_element_by_name('cajDown').click()
                    time.sleep(5)
                    print("编号为" + str(count) + "的论文:" + bro_new.find_element_by_xpath("/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[1]/h1").text + "————下载成功")
                    count += 1
                    bro_new.quit()
            bro.find_element_by_xpath('//*[@id="PageNext"]').click()
            time.sleep(10)
    

    打包后的PyCNKi.exe程序同步佐佑思维公众号二维码如下:

    佐佑思维

    展开全文
  • 最近要批量下载某个方向的一些文献,准备通过sci-hub来下载,在找python爬虫的方式下载文献的时候发现了scihub2pdf工具。 一开始是看到这篇文章:利用python下载scihub成文献为PDF,在里面看到了一个批量下载scihub...

    最近要批量下载某个方向的一些文献,准备通过sci-hub来下载,在找python爬虫的方式下载文献的时候发现了scihub2pdf工具。

    一开始是看到这篇文章:利用python下载scihub成文献为PDF,在里面看到了一个批量下载scihub文献的的工具:scihub2pdf

    我是在ubuntu系统里操作的安装的方式和官网里的差不多:

    Install

    $  pip3 install scihub2pdf
    

    Linux Using npm

    $ sudo apt-get install npm
    $ sudo npm install -g phantomjs
    

    安装后还有一件事:修改源码,源码里的地址为http://sci-hub.cc开头的,我要使用的网站是https://scihubtw.tw/,这个👇
    在这里插入图片描述
    修改源码: download.py里的42行,我的改为如下在这里插入图片描述
    我的download.py文件在/usr/local/lib/python3.6/ddist-packges/scihub2pdf 里
    在这里插入图片描述

    具体使用方法:

    通过DOI值

    $ scihub2pdf 10.1038/s41524-017-0032-0
    

    我的使用👇
    在这里插入图片描述
    批量使用DOI

    txt文件里内容:

    10.1038/s41524-017-0032-0
    10.1063/1.3149495
    .....
    
    $ scihub2pdf -i dois.txt --txt
    

    我的使用👇
    在这里插入图片描述
    小tips:
    1、下载时,我是在root用户下使用的。
    2、下载文件的路径,即你的root打开目录。
    3、下载下来有一个png图片,我不想要图片,可以在scihub.py的162行注销,就不会有了
    在这里插入图片描述
    4、将doi放在txt文件里批量下载的时候,让txt文件在你打开的文件里面就可以了。我是放在这个文件里面的在这里插入图片描述
    5、在普通用户下,出现ghostdriver.log文件权限问题时,修改权限即可在普通用户下使用。

    展开全文
  • ') I.append('0') else: print('论文链接:%s' % downUrl) print('下载中...') pdf = download_article(downUrl) #文献存储目录 D:\doc_E\papers\ with open('D:\doc_E\papers\%s.pdf' % title, 'wb') as f: f.write...
    # -*- coding: utf-8 -*-
    """
    Created on  Mar  10 21:22:22 2021
    @author: kimol_love & solar2030
    >>>>>>>> This code is designed based on kimol_love's code in his blog, https://blog.csdn.net/kimol_justdo/article/details/112996678?spm=1001.2014.3001.5501     Say thanks to him. Here, a 【for】 command was used so that we can downloading a series of papers by on-click. All we need to prepare is a text file including the lists of paper titles. And at the same time, I solved a bug related to '/' in paper titles. It can trouble troubles because '/' cannot be used in filenames. Using 【str.replace】command, we can replace '/'s with '_', for example, the bug then can be fixed.
    >>>>>>>> 
    """
    import os
    import time
    import requests
    from bs4 import BeautifulSoup
    from tkinter.filedialog import askopenfilename
    import matplotlib.pyplot as plt
    import numpy as np
    
    path_and_name = askopenfilename(title='Paper lists: title or doi', filetypes=[('TXT', '*.txt')],
                                    initialdir='D:\\')
    data = []
    with open(path_and_name)as txt_file:
        line = txt_file.readlines()
        for i, rows in enumerate(line):
            if i in range(0, len(line)):
                data.append(rows)
    print(data[0])
    
    
    
    def search_article(artName):
        '''
        搜索论文
        ---------------
        输入:论文名
        ---------------
        输出:搜索结果(如果没有返回"",否则返回PDF链接)
        '''
        url = 'https://www.sci-hub.ren/'
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
                   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                   'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
                   'Accept-Encoding': 'gzip, deflate, br',
                   'Content-Type': 'application/x-www-form-urlencoded',
                   'Content-Length': '123',
                   'Origin': 'https://www.sci-hub.ren',
                   'Connection': 'keep-alive',
                   'Upgrade-Insecure-Requests': '1'}
        data = {'sci-hub-plugin-check': '',
                'request': artName}
        res = requests.post(url, headers=headers, data=data)
        html = res.text
        soup = BeautifulSoup(html, 'html.parser')
        iframe = soup.find(id='pdf')
        if iframe == None:  # 未找到相应文章
            return ''
        else:
            downUrl = iframe['src']
            if 'http' not in downUrl:
                downUrl = 'https:' + downUrl
            return downUrl
    
    
    def download_article(downUrl):
        '''
        根据论文链接下载文章
        ----------------------
        输入:论文链接
        ----------------------
        输出:PDF文件二进制
        '''
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
                   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                   'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
                   'Accept-Encoding': 'gzip, deflate, br',
                   'Connection': 'keep-alive',
                   'Upgrade-Insecure-Requests': '1'}
        res = requests.get(downUrl, headers=headers)
        return res.content
    
    
    def welcome():
        '''
        欢迎界面
        '''
        os.system('cls')
        title = '''
                   _____  _____ _____      _    _ _    _ ____
                  / ____|/ ____|_   _|    | |  | | |  | |  _ \
                 | (___ | |      | |______| |__| | |  | | |_) |
                  \___ \| |      | |______|  __  | |  | |  _ <
                  ____) | |____ _| |_     | |  | | |__| | |_) |
                 |_____/ \_____|_____|    |_|  |_|\____/|____/
    
    
                '''
        print(title)
    
    
    if __name__ == '__main__':
    #    while True:
         I=[]
         for ii in range(len(data)):
            welcome()
            #request = input('请输入URL、PMID、DOI或者论文标题:')
            request = data[ii].strip()
            title=request.replace("/", "_")
            str1=str(ii)+'-'
            title1=str1+title
            print('搜索中...')
            downUrl = search_article(request)
            if downUrl == '':
                print('未找到相关论文,请重新搜索!')
                I.append('0')
            else:
                print('论文链接:%s' % downUrl)
                print('下载中...')
                pdf = download_article(downUrl)
                #文献存储目录   D:\doc_E\papers\
                with open('D:\doc_E\papers\%s.pdf' % title1, 'wb') as f:
                    f.write(pdf)
                print('---下载完成---')
                I.append('1')
    
    
            time.sleep(0.8)
         print('下载完成统计: %s', I)
    展开全文
  • CNKI-STUDY是一款可以批量下载文献的软件,可以从中进行你需要的文献筛选。
  • 利用web of science 批量获取doi至表格,之后通过运行python代码,自动批量下载文献 提示:其中,python代码是根据WuGenQiang(《通过doi下载单个文献pdf》)的代码修改的(本人python没学多少,所以代码不规范,...

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


    前言

    利用web of science 批量获取doi至表格,之后通过运行python代码,自动批量下载文献
    我用的python3.7,在Anaconda里运行的


    提示:其中,python代码是根据WuGenQiang(《通过doi下载单个文献pdf》)的代码修改的(本人python没学多少,所以代码不规范,见谅)。

    一、将选择的文献用excel导出

    1.文献按Excel导出

    在web of science内检索完自己想要的文献后,选择自己需要的文献,然后点击<将记录导出至Excel>,记录内容改为<全纪录>,点导出

    在这里插入图片描述

    2. 将DOI另存在一个excel中,存为xlsx格式

    直接用导出的excel,会出错,可能是我调用excel的类型不对?只能读取xlsx?不太清楚,懒得试了,有兴趣的小伙伴可以自己试试
    在这里插入图片描述

    二、利用python批量下载Excel表中文献

    将代码保存至F:\doi_download.py(也可设为其他),将excel挪到F盘,将下面代码的doi所在列改成A列,然后运行就行了。

    2.代码

    # -*- coding: utf-8 -*-
    """
    Created on Sun Jun  6 21:09:44 2021
    
    @author: dell
    """
    
    
    """
    这是原作者的信息
    @File: version_1.1_doi_to_get_pdf.py
    @Time: 2021/4/20 10:10 下午
    @Author: genqiang_wu@163.com
    @desc: 通过doi号下载文献pdf
    """
    
    import requests
    import re
    import os
    import urllib.request
    import openpyxl
    
    # headers 保持与服务器的会话连接
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
    }
    
    '''
    根据doi,找到文献的pdf,然后下载到本地
    '''
    
    
    def getPaperPdf(url):
        pattern = '/.*?\.pdf'
        content = requests.get(url, headers=headers)
        download_url = re.findall(pattern, content.text)
        # print(download_url)
        download_url[1] = "https:" + download_url[1]
        print(download_url[1])
        path = r"papers"
        if os.path.exists(path):
            pass
        else:
            os.makedirs(path)
    
        # 使用 urllib.request 来包装请求
        req = urllib.request.Request(download_url[1], headers=headers)
        # 使用 urllib.request 模块中的 urlopen方法获取页面
        u = urllib.request.urlopen(req, timeout=5)
    
        file_name = download_url[1].split('/')[-2] + '%' + download_url[1].split('/')[-1]
        f = open(path + '/' + file_name, 'wb')
    
        block_sz = 8192
        while True:
            buffer = u.read(block_sz)
            if not buffer:
                break
            f.write(buffer)
        f.close()
        print("Sucessful to download" + " " + file_name)
    '''
    将表格放在代码保存和运行的路径内,将wb变量内的'n0606.xlsx'改为自己的excel文件名,
    最后下载的论文在该路径下新建的papers文件夹内
    '''
    wb = openpyxl.load_workbook('n0606.xlsx')
    #doi在sheet1中
    sheet1 = wb.get_sheet_by_name('Sheet1')
    #读取第A列
    
    '''
    修改代码内,excel中DOI所在列,我的在BC,所以col_range变量后面的字符改为了‘BC’
    '''
    col_range = sheet1['A']
    # 读取其中的第几行:row_range = sheet1[2:6]
    fails=[]
    
    
     #以下代码加入了我找的其他SCI-hub网址,不需要可以删除一些
    for col in col_range: # 打印BC两列单元格中的值内容
        doi=col.value
        print (doi)
        if __name__ == '__main__':
            sci_Hub_Url = "https://sci-hub.ren/"
            paper_url = sci_Hub_Url + doi
            print(paper_url)
            nmm=0
            try:
                getPaperPdf(paper_url)  # 通过文献的url下载pdf
                continue
            except Exception:
                nmm=1
                print("Failed to get pdf 1"           
            if nmm==1:
                try :
                    sci_Hub_Url_2 = "https://sci-hub.se/"
                    paper_url_2 = sci_Hub_Url_2 + doi
                    getPaperPdf(paper_url_2)
                    
                    continue
                except Exception:
                    print("Failed to get pdf 2")
            if nmm==1:
                try :
                    sci_Hub_Url_3 = "https://sci-hub.st/"
                    paper_url_3 = sci_Hub_Url_3 + doi
                    getPaperPdf(paper_url_3)
                    continue
                except Exception:
                    print("Failed to get pdf 3")
            if nmm==1:
                try :
                    sci_Hub_Url_4 = "https://sci-hub.shop/"
                    paper_url_4 = sci_Hub_Url_4 + doi
                    getPaperPdf(paper_url_4)
                    continue
                except Exception:
                    print("Failed to get pdf 4")
            if nmm==1:
                try :
                    sci_Hub_Url_5 = "https://sci-hub.shop/"
                    paper_url_5 = sci_Hub_Url_5 + doi
                    getPaperPdf(paper_url_5)
                    continue
                except Exception:
                    print("Failed to get pdf 5")          
            if nmm==1:
                try :
                    sci_Hub_Url_7 = "https://sci-hub.do/"
                    paper_url_7 = sci_Hub_Url_7 + doi
                    getPaperPdf(paper_url_7)
                    continue
                except Exception:
                    print("Failed to get pdf 7")    
            if nmm==1:
                try :
                    sci_Hub_Url_6 = "https://libgen.ggfwzs.net/"
                    paper_url_6 = sci_Hub_Url_6 + doi
                    getPaperPdf(paper_url_6)
                    continue
                except Exception:
                    print("Failed to get pdf 6")
                    fails.append(doi)
                    
    #获取下载失败的doi
    print (fails)
    
    

    结果展示图在这里。
    在这里插入图片描述

    总结

    根据上面写的就可以根据excel的DOI批量下载论文了,不过有一些会失败,那种可能就要手动了,我自己感觉还可以,大家可以试试。
    另:python实在不行,所以根据别人代码改的(强调!!!),我加的那些让代码看起来很啰嗦,有更好的写法,欢迎大家告诉我,感恩

    展开全文
  • python批量下载cnki知网文献

    千次阅读 2020-10-23 12:58:12
    python批量下载cnki知网caj文献github项目地址代码工作方式相关库分解代码requests初始化webdriver初始化使用selenium获取登录cookies读取excel文件里的内容读取已经完成的任务序号使用requests搜索文献并分析结果...
  • 参考文献如何利用EndNote批量下载文章 Step1: 登陆Web of Science官网 https://apps.webofknowledge.com Step2: 搜索需要检索的文章并点击进入 Step3: 批量下载参考文献 下滑到最后,查看...
  • 然而,现在有了一个简单高效实用的方法,只需两分钟即可批量下载所有的参考文献以及施引文献到mendely(非常好用的文献管理软件) 第一步: 登录网址 链接: https://www.scopus.com/search/form.uri?display=basic. 点...
  • 半自动批量下载IEEE文献

    千次阅读 2016-10-25 14:46:37
    因为一直在外边联合培养,无法使用学校的数据库,所以下载文献一下子从最简单的事情变成最复杂的事情。 首先想到的方法是学校放一台电脑,然后开teamviewer,远程操控,但公司和学校的双重烂网速让这件本来很简单的...
  • ACM文献citation批量下载

    千次阅读 2016-08-11 22:13:33
    ACM批量下载citation
  • 利用zotero实现知网文献批量下载

    千次阅读 2020-11-30 00:07:25
    利用zotero实现知网文献批量下载 软件及相关插件 文献管理利器:Zotero的安装、配置以及使用说明.转载自Magic–Rain Zotero 5.0使用教程/坚果云同步盘和Zotero的配置过程详解.转载自CHAK 点击下载ZotFile Zotero...
  • 一分钟快速把一篇论文后面的参考文献全部下载下来,根据参考文献快速下载对应的论文,根据参考文献批量下载论文,论文文献快速下载,一键下载论文参考文献。 一、获取论文 1)需要的软件进行下载,下载地址:点击...
  • python批量管理文献

    2021-04-03 10:18:08
    目前硕士搬砖,老师给了个任务,下载700篇相关文献,并且把每篇文献按照 **年份-期刊名称-文章题目**格式来重命名,未处理之前如图: 处理完成之后如图: 对于700篇的文献整理,每一篇要依次点开,寻找对应 ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

批量下载文献