最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)一個論文下載器的過程

 更新時間:2021年01月18日 10:05:24   作者:程序猿小白^  
這篇文章主要介紹了Python實現(xiàn)一個論文下載器的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在科研學(xué)習(xí)的過程中,我們難免需要查詢相關(guān)的文獻(xiàn)資料,而想必很多小伙伴都知道SCI-HUB,此乃一大神器,它可以幫助我們搜索相關(guān)論文并下載其原文??梢哉f,SCI-HUB造福了眾多科研人員,用起來也是“美滋滋”。

然而,當(dāng)師姐告訴我:“xx,可以幫我下載幾篇文獻(xiàn)嘛?”。樂心助人的我自當(dāng)是滿口答應(yīng)了,心想:“這種小事就交給我叭~”

于是乎,我收到了一個excel文檔,66篇論文的列表安靜地趟在里面(此刻心中碎碎念:“這尼瑪,是幾篇嘛...”)。我粗略算了一下,復(fù)制、粘貼、下載,一套流程走下來,每篇論文少說也得30秒,66篇的話....啊,這不能忍!

很顯然,一篇一篇的下載,不是我的風(fēng)格所以,我決定寫一個論文下載器助我前行。


一、代碼分析

代碼分析的詳細(xì)思路跟以往依舊如此雷同,逃不過的還是:抓包分析->模擬請求->代碼整合。由于一會兒kimol君還得去搬磚,今天就不詳細(xì)展開了。

1. 搜索論文

通過論文的URL、PMID、DOI號或者論文標(biāo)題等搜索到對應(yīng)的論文,并通過bs4庫找出PDF原文的鏈接地址,代碼如下:

def search_article(artName):
 '''
 搜索論文
 ---------------
 輸入:論文名
 ---------------
 輸出:搜索結(jié)果(如果沒有返回"",否則返回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: # 未找到相應(yīng)文章
  return ''
 else:
  downUrl = iframe['src']
  if 'http' not in downUrl:
   downUrl = 'https:'+downUrl
  return downUrl

2. 下載論文

得到了論文的鏈接地址之后,只需要通過requests發(fā)送一個請求,即可將其下載:

def download_article(downUrl):
 '''
 根據(jù)論文鏈接下載文章
 ----------------------
 輸入:論文鏈接
 ----------------------
 輸出:PDF文件二進(jìn)制
 '''
 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

二、完整代碼

將上述兩個函數(shù)整合之后,我的完整代碼如下:

# -*- coding: utf-8 -*-
"""
Created on Tue Jan 5 16:32:22 2021
@author: kimol_love
"""
import os
import time
import requests
from bs4 import BeautifulSoup
 
def search_article(artName):
 '''
 搜索論文
 ---------------
 輸入:論文名
 ---------------
 輸出:搜索結(jié)果(如果沒有返回"",否則返回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: # 未找到相應(yīng)文章
  return ''
 else:
  downUrl = iframe['src']
  if 'http' not in downUrl:
   downUrl = 'https:'+downUrl
  return downUrl
  
def download_article(downUrl):
 '''
 根據(jù)論文鏈接下載文章
 ----------------------
 輸入:論文鏈接
 ----------------------
 輸出:PDF文件二進(jìn)制
 '''
 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:
  welcome()
  request = input('請輸入URL、PMID、DOI或者論文標(biāo)題:')
  print('搜索中...')
  downUrl = search_article(request)
  if downUrl == '':
   print('未找到相關(guān)論文,請重新搜索!')
  else:
   print('論文鏈接:%s'%downUrl)
   print('下載中...')
   pdf = download_article(downUrl)
   with open('%s.pdf'%request, 'wb') as f:
    f.write(pdf)
   print('---下載完成---')
  time.sleep(0.8)

不出所料,代碼一跑,我便輕松完成了師姐交給我的任務(wù),不香嘛?

到此這篇關(guān)于Python實現(xiàn)一個論文下載器的過程的文章就介紹到這了,更多相關(guān)python論文下載器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python?歸并排序的實現(xiàn)

    python?歸并排序的實現(xiàn)

    歸并排序是一種分治算法,它將數(shù)組分成兩半,分別對這兩半進(jìn)行排序,然后將排序后的兩半合并在一起,本文就來介紹一下python?歸并排序的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • django foreignkey(外鍵)的實現(xiàn)

    django foreignkey(外鍵)的實現(xiàn)

    這篇文章主要介紹了django foreignkey(外鍵)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python?PySpark案例實戰(zhàn)教程

    Python?PySpark案例實戰(zhàn)教程

    PySpark是由Spark官方開發(fā)的Python語言第三方庫,Python開發(fā)者可以使用pip程序快速的安裝PySpark并像其它三方庫那樣直接使用,本文給大家介紹Python?PySpark案例實戰(zhàn),感興趣的朋友一起看看吧
    2023-09-09
  • numpy concatenate數(shù)組拼接方法示例介紹

    numpy concatenate數(shù)組拼接方法示例介紹

    這篇文章主要介紹了numpy concatenate數(shù)組拼接方法示例介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python實現(xiàn)銀行實戰(zhàn)系統(tǒng)

    python實現(xiàn)銀行實戰(zhàn)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)銀行實戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python設(shè)計模式之觀察者模式簡單示例

    Python設(shè)計模式之觀察者模式簡單示例

    這篇文章主要介紹了Python設(shè)計模式之觀察者模式,簡單描述了觀察者模式的概念、原理,并結(jié)合實例形式分析了Python觀察者模式的相關(guān)定義與使用技巧,需要的朋友可以參考下
    2018-01-01
  • 對TensorFlow中的variables_to_restore函數(shù)詳解

    對TensorFlow中的variables_to_restore函數(shù)詳解

    今天小編就為大家分享一篇對TensorFlow中的variables_to_restore函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python基礎(chǔ)學(xué)習(xí)之深淺拷貝問題及遞歸函數(shù)練習(xí)

    Python基礎(chǔ)學(xué)習(xí)之深淺拷貝問題及遞歸函數(shù)練習(xí)

    在實際工作中,經(jīng)常涉及到數(shù)據(jù)的傳遞。這篇文章主要為大家介紹了Python的一些基礎(chǔ)學(xué)習(xí):深拷貝與淺拷貝問題、遞歸函數(shù)的練習(xí),需要的朋友可以參考一下
    2021-12-12
  • python提取具有某種特定字符串的行數(shù)據(jù)方法

    python提取具有某種特定字符串的行數(shù)據(jù)方法

    今天小編就為大家分享一篇python提取具有某種特定字符串的行數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 使用pandas對兩個dataframe進(jìn)行join的實例

    使用pandas對兩個dataframe進(jìn)行join的實例

    今天小編就為大家分享一篇使用pandas對兩個dataframe進(jìn)行join的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論

上栗县| 建阳市| 朝阳县| 科技| 陆河县| 喜德县| 新巴尔虎右旗| 炉霍县| 富阳市| 平武县| 南昌县| 赤水市| 游戏| 黔江区| 吉木萨尔县| 延川县| 烟台市| 湘阴县| 衢州市| 岳池县| 建水县| 嘉荫县| 遂溪县| 鄯善县| 扎兰屯市| 保靖县| 清徐县| 梅河口市| 沙湾县| 榆社县| 墨脱县| 德州市| 罗田县| 荆州市| 株洲市| 宣武区| 九龙坡区| 桐庐县| 兴仁县| 民县| 焉耆|