scihub批量下载论文 python 代码
时间: 2023-04-04 12:03:07 浏览: 67
您好,我可以回答这个问题。scihub批量下载论文的Python代码可以在GitHub上找到,您可以搜索“scihub-python”或“scihub-downloader”来获取相关代码。希望能对您有所帮助。
相关问题
python批量下载scihub文献
### 回答1:
Python可以使用requests库和BeautifulSoup库来批量下载SciHub文献。首先需要获取文献的DOI号码,然后使用requests库向SciHub发送请求,获取文献的下载链接。最后使用requests库下载文献即可。
以下是一个简单的Python代码示例:
```python
import requests
from bs4 import BeautifulSoup
# 设置SciHub的网址
base_url = 'https://sci-hub.se/'
# 读取包含DOI号码的文件
with open('doi_list.txt', 'r') as f:
doi_list = f.readlines()
# 遍历DOI号码列表
for doi in doi_list:
# 构造请求SciHub的URL
url = base_url + doi.strip()
# 发送请求
response = requests.get(url)
# 解析HTML页面
soup = BeautifulSoup(response.text, 'html.parser')
# 获取文献的下载链接
download_link = soup.find('iframe')['src']
# 下载文献
response = requests.get(download_link)
# 保存文献到本地
with open(doi.strip() + '.pdf', 'wb') as f:
f.write(response.content)
```
需要注意的是,SciHub的网址可能会变化,需要根据实际情况进行修改。此外,需要安装requests库和BeautifulSoup库。
### 回答2:
Python是一个开源的高级编程语言,可以实现各种任务和应用程序。而Sci-Hub是一个自动化的网站,可以为研究人员提供大量的科学文献下载。如果需要进行批量下载Sci-Hub文献,可以使用Python来轻松实现。以下是实现步骤:
第一步:安装必要的库
Python中有一些库可以方便地下载并自动化访问网站。建议使用requests和bs4库。您可以使用以下命令在终端中安装它们:
```
pip install requests
```
```
pip install bs4
```
第二步:编写Python脚本
使用Python编写脚本来下载Sci-Hub文献,主要是通过请求Sci-Hub网站并从响应中提取PDF文件的链接。
```
import requests
from bs4 import BeautifulSoup
def download_article(doi):
try:
response = requests.get("https://sci-hub.se/" + doi, timeout=5)
soup = BeautifulSoup(response.text, "html.parser")
pdf_url = soup.find("iframe", {"id": "pdf"})["src"]
pdf_response = requests.get(pdf_url, timeout=5)
with open(doi + ".pdf", "wb") as f:
f.write(pdf_response.content)
print("Downloaded " + doi)
except:
print("Failed to download " + doi)
dois = ["10.1016/j.commatsci.2020.110424", "10.1103/PhysRevB.103.184520", "10.1038/s41567-021-01187-2"]
for doi in dois:
download_article(doi)
```
以上Python脚本可以批量下载三篇不同的文献。你只需要将筛选你想要下载的文献的DOI号,保存到一个列表中并进行迭代即可。
第三步:运行Python脚本
完成了以上两个步骤后,就可以运行脚本了。您可以在终端中使用以下命令来运行Python脚本:
```
python download_articles.py
```
当运行脚本时,程序将尝试下载每个DOI列表中的文献。如果成功,它将在脚本所在目录中创建PDF文件。
需要注意的是,Sci-Hub网站一直在被封锁和被封禁。因此,如果您发现在运行脚本时遇到问题,请尝试更新Sci-Hub的URL或寻找其他来源。此外,下载的文献应该仅用于研究和教育目的。
### 回答3:
python是一种高级编程语言,因其灵活、易于学习和优秀的开源库而备受欢迎。在科研工作中,文献探索和下载是不可或缺的一环。scihub(科学技术文献镜像库)可以提供大量的科技文献下载,但手工下载文献费时费力。因此,使用python批量下载scihub文献将会极大提高效率。
下面是具体的python代码实现:
1. 安装依赖库
从pypi中安装必备的依赖库,用于发送http请求,解析html等操作
```python
!pip install requests beautifulsoup4 pandas
```
2. 编写下载函数
接下来需要编写一个下载函数,该函数输入要下载的文献的DOI(数字对象标识符),并从scihub下载该文献。(DOI是一种类似于URL的唯一标识符,可以定位到文献在数据库中的位置)
将文献DOI传递给函数,该函数使用requests库向scihub发送请求,并在响应中提取PDF的链接。然后使用requests.get方法下载pdf文献,并使用open和write方法将文件写入本地磁盘。
```python
import requests
import os
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
import time
def download_pdf(doi, directory='./pdf/'):
"""
Requests a DOI and writes it to a directory.
DOI: The DOI of the publication to download in string format (e.g. "10.1016/j.celrep.2020.01.063").
directory: The folder to save the downloaded PDFs to. Default folder is 'pdf/' on the current working directory.
"""
scihub_url = 'https://sci-hub.st/' # scihub的url
# 尝试获取PDF的链接
url = ''.join([scihub_url, doi])
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
pdf_url = soup.find_all('iframe', src=True)[0]['src']
# 下载PDF并写入磁盘
if pdf_url:
response = requests.get(pdf_url, stream=True, verify=False)
with open(f'{directory}{doi}.pdf', 'wb') as file:
for chunk in response.iter_content(1024):
file.write(chunk)
print(f'{doi} downloaded.')
```
3. 导入数据并批量下载
在本例中,我们将从CSV文件中读取DOI,并将那些DOI下载到本地磁盘。(CSV是一种电子表格格式,用于存储和管理数据)。
```python
import pandas as pd
df = pd.read_csv('papers.csv')
DOIs = df['DOI'].tolist()
# 创建目录
if not os.path.exists('pdf'):
os.makedirs('pdf')
# 批量下载PDF
for doi in DOIs:
download_pdf(doi)
time.sleep(5) # 限制下载速度,以免被封禁
```
在运行完上述代码后,相对应的DOI就在目录下被转换成pdf文件进行保存了。
批量下载scihub文献的代码过程之中,可以根据不同的需求进行实现,通过上述代码块的组合,可以实现许多有意义的任务。同时,这也是python编程在科研方面优秀的体现。
给出批量下载的Python代码
好的,以下是一个简单的 Python 脚本,可以批量下载指定链接列表中的文件:
```python
import requests
# 要下载的链接列表
url_list = [
'https://example.com/file1.zip',
'https://example.com/file2.zip',
'https://example.com/file3.zip'
]
# 下载链接列表中的文件
for url in url_list:
# 获取文件名
file_name = url.split('/')[-1]
# 发送 HTTP GET 请求,下载文件
response = requests.get(url)
# 保存文件
with open(file_name, 'wb') as f:
f.write(response.content)
print(f'{file_name} 下载完成')
```
在上面的代码中,我们使用 requests 库发送 HTTP GET 请求,下载每个链接指向的文件,并将其保存到当前目录下的文件中。如果您需要下载其他类型的文件,可以根据需要修改代码。
当然,这只是一个简单的示例,实际应用场景中可能需要处理更多的异常情况和错误,比如网络连接失败、文件已存在等等。
相关推荐














