2021-03-10 Python batch download literature PDF

# -*- 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):
    '''
    搜索论文
    ---------------
    输入:论文名
    ---------------
    输出:搜索结果(如果没有返回"", Otherwise return to PDF link) 
    ''' 
    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: # The corresponding article was not found 
        return'' 
    else: 
        downUrl = iframe['src'] 
        if'http' not in downUrl: 
            downUrl ='https:' + downUrl 
        return downUrl 


def download_article(downUrl): 
    ''' 
    According to the paper link Download the article 
    ---------------------- 
    Enter: Thesis link 
    ---------------------- 
    Output: PDF file binary 
    ''' 
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0', 
               ' the Accept ':' text / HTML, the Application / xml XHTML + ,application/xml;q=0.9,image/webp,*/*;q=0.8',


              ____) | |____ _| |_ | | | | |__| | |_) | 
             |_____/ \_____|_____| |_| |_|\____/|____/ 


            ''' 
    print(title) 


if __name__ =='__main__': 
# while True: 
     I=[] 
     for ii in range(len(data)): 
        welcome() 
        #request = input('Please enter URL, PMID, DOI or the title of the paper:') 
        request = data [ii].strip() 
        title=request.replace("/", "_") 
        str1=str(ii)+'-' 
        title1=str1+title 
        print('Searching...') 
        downUrl = search_article( request) 
        if downUrl == '':
            print('Related papers were not found, please search again!') 
            I.append('0')
        else:
            print('Thesis link: %s'% downUrl) 
            print('Downloading...') 
            pdf = download_article(downUrl) #Document 
            storage directory D:\doc_E\papers\ 
            with open('D:\doc_E\papers\ %s.pdf'% title1,'wb') as f: 
                f.write(pdf) 
            print('---download complete---') 
            I.append('1') 


        time.sleep(0.8) 
     print( 'Download complete statistics: %s', I)

Guess you like

Origin blog.csdn.net/you_us/article/details/114646697