# -*- 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)
2021-03-10 Python batch download literature PDF
Guess you like
Origin blog.csdn.net/you_us/article/details/114646697
Recommended
Ranking