,,Python实现一个论文下载器的过程

,,Python实现一个论文下载器的过程

本文主要介绍用Python实现一个论文下载器的过程。这篇文章对你来说很详细,对你的学习或工作有一定的参考价值。有需要的朋友可以参考一下。

:

目录

1.代码分析1。搜索文件2。下载论文2。在科学研究和学习过程中,我们不可避免地需要查阅相关文献。想必很多朋友都知道SCI-HUB,这是一个很棒的神器,可以帮助我们搜索相关论文,下载他们的原文。可以说SCI-HUB让很多科研人员受益匪浅,用起来也很“美”。

然而,当大姐告诉我“xx,你能帮我下载一些文档吗?”。我准备帮助别人,我想,“给我这个小东西。”

结果收到一个excel文档,里面有66篇论文的列表悄悄涉水进去(此刻我在想“这些是多少啊,妈的……”).我粗略算了一下,复制,粘贴,下载,一套流程。每篇论文至少要讲30秒。如果有66篇论文.啊,这是不能容忍的!

显然,一个一个下载不是我的风格,所以我决定写一个论文下载器来帮助我前进。

一、代码分析

代码分析的详细思路还是和以前一样,但是没有逃避:包捕获分析-模拟请求-代码集成。由于kimol君后面还要搬砖,今天就不赘述了。

1. 搜索论文

通过论文的网址、PMID、DOI号或标题搜索相应的论文,通过bs4库找出原PDF的链接地址。代码如下:

定义搜索_文章(艺术名):

'''

搜索文件

-

输入:纸张名称

-

输出:搜索结果(如果没有返回“”,则返回PDF链接)

'''

url='https://www.sci-hub.ren/'

headers={ ' User-Agent ':' Mozilla/5.0(Windows NT 6.3;Win64x64rv:84.0)壁虎/20100101火狐/84.0 ',

Accept':'text/html,application/xhtml xml,application/xml。q=0.9,image/webp,*/*;q=0.8 ',

接受-语言':' 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 ',

内容长度':' 123 ',

Origin':'https://www.sci-hub.ren ',

连接':'保持活动',

升级-不安全-请求':' 1'}

data={'sci-hub-plugin-check ':' ',

'请求':艺术名}

res=requests.post(url,headers=headers,data=data)

html=res.text

soup=BeautifulSoup(html,' html.parser ')

iframe=soup.find(id='pdf ')

Iframe==none: #未找到相应的文章

返回“”

否则:

downUrl=iframe['src']

如果“http”不在downUrl中:

downUrl='https:' downUrl

返回向下Url

2. 下载论文

获得论文的链接地址后,您只需通过requests发送一个请求来下载它:

def下载_文章(downUrl):

'''

根据论文链接下载文章。

-

输入:纸质链接

-

输出:PDF文件二进制

'''

headers={ ' User-Agent ':' Mozilla/5.0(Windows NT 6.3;Win64x64rv:84.0)壁虎/20100101火狐/84.0 ',

Accept':'text/html,application/xhtml xml,application/xml。q=0.9,image/webp,*/*;q=0.8 ',

接受-语言':' 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 ',

连接':'保持活动',

升级-不安全-请求':' 1'}

res=requests.get(downUrl,headers=headers)

返回资源内容

二、完整代码

集成以上两个功能后,我的完整代码如下:

# -*-编码:utf-8 -*-

'''

创建于2021年1月5日星期二16:32:22

@作者:kimol_love

'''

导入操作系统

导入时间

导入请求

从bs4导入BeautifulSoup

定义搜索_文章(艺术名):

'''

搜索文件

-

输入:纸张名称

-

输出:搜索结果(如果没有返回“”,则返回PDF链接)

'''

url='https://www.sci-hub.ren/'

headers={ ' User-Agent ':' Mozilla/5.0(Windows NT 6.3;Win64x64rv:84.0)壁虎/20100101火狐/84.0 ',

接受':'文本/html,应用程序/xhtml xml,应用程序/xml .q=0.9,image/webp,*/*;q=0.8 ',

接受-语言:' 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 ',

内容长度':' 123 ',

Origin':'https://www.sci-hub.ren ',

连接':'保持活动,

升级-不安全-请求':' 1'}

data={'sci-hub-plugin-check ':' ',

'请求:艺术名}

res=requests.post(url,headers=headers,data=data)

html=res.text

soup=BeautifulSoup(html,' html.parser ')

iframe=soup.find(id='pdf ')

如果iframe==None: #未找到相应文章

返回""

否则:

downUrl=iframe['src']

如果" http "不在downUrl中:

downUrl='https:' downUrl

返回向下全球资源定位器(Uniform Resource Locator)

极好的下载_文章(downUrl):

'''

根据论文链接下载文章

-

输入:论文链接

-

输出:PDF文件二进制

'''

headers={ ' User-Agent ':' Mozilla/5.0(Windows NT 6.3;Win64x64rv:84.0)壁虎/20100101火狐/84.0 ',

接受':'文本/html,应用程序/xhtml xml,应用程序/xml .q=0.9,image/webp,*/*;q=0.8 ',

接受-语言:' 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 ',

连接':'保持活动,

升级-不安全-请求':' 1'}

res=requests.get(downUrl,headers=headers)

返回资源内容

极好的欢迎():

'''

欢迎界面

'''

操作系统(“cls”)

title=' ' '

_____ _____ _____ _ _ _ _ ____

/____|/____|_ _| | | | | | | | _ \

| (___ | | | |______| |__| | | | | |_) |

\___ \| | | |______| __ | | | | _

____) | |____ _| |_ | | | | |__| | |_) |

|_____/\_____|_____| |_| |_|\____/|____/

'''

打印(标题)

if __name__=='__main__ ':

虽然正确:

欢迎()

请求=输入('请输入网址、PMID、土井或者论文标题:')

打印('搜索中.')

downUrl=search_article(请求)

if downUrl==" ":

打印('未找到相关论文,请重新搜索!')

否则:

打印('论文链接:%s'%downUrl)

打印('下载中.')

pdf=下载文章(dowurl)

用打开(' % s.pdf ' %请求,' wb ')作为女:

f.write(pdf)

打印('-下载完成- ')

时间。睡眠(0.8)

不出所料,代码一跑,我便轻松完成了师姐交给我的任务,不香嘛?

到此这篇关于计算机编程语言实现一个论文下载器的过程的文章就介绍到这了,更多相关大蟒论文下载器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: