爬虫批量下载科研论文(SciHub)

系列文章目录

利用 eutils 实现自动下载序列文件


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

大家好✨,这里是bio🦖。这次为大家带来自动收集文献信息、批量下载科研论文的脚本(只能批量下载公布在sci-hub上的科研论文)。平常阅读文献时只需要一篇一篇下载即可,并不需要用到批量下载的操作。但有时需要对某领域进行总结或者归纳,就可以考虑使用批量下载咯~

导师下令找文献,学生偷偷抹眼泪。
文献三千挤满屏,只下一篇可不行。
作息紊乱失双休,日夜不分忘寝食。
满腔热血搞科研,一盆冷水当头洛。
(打油诗人作)


一、获取文献信息

每个人的研究领域不一样,获取文献信息的方式不一样。这里以Pubmed1为例,PubMed是主要用于检索MEDLINE数据库中,生命科学和生物医学引用文献及索引的免费搜索引擎。之前爬取冠状病毒核酸数据使用过eutils,本篇博客也使用eutils去获取文献信息,关于eutils的介绍可以看利用 eutils 实现自动下载序列文件 。这里就不做介绍~

首先构造搜索url,其中term是你检索的关键词,year对应文献发表日期,API_KEY能够让你在一秒内的访问次数从3次提升到10次。这里将term替换为Machine learningyear替换为2022。然后使用requests库获取该url的对应的信息,在使用BeautifulSoup库将其转化为html格式。

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&api_key={API_KEY}&term={term}+{year}[pdat]

代码如下:

import pandas as pd
import requests
from bs4 import BeautifulSoup
import math
import re
import time

API_KEY = "Your AIP KEY"
term = "Machine Learning"
year = "2022"
url_start = f'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&api_key={
     
     API_KEY}&term={
     
     term}+{
     
     year}[pdat]'
info_page = BeautifulSoup(requests.get(url_start, timeout=(5, 5)).text, 'html.parser')

爬取的结果如下,可以看到结果主要包括许多PMID。然后包括的信息总数<count>31236</count>、最大返回数<retmax>20</retmax>以及结果开始的序号<retstart>0</retstart>。下一步就是根据id获取文章对应的信息。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE eSearchResult PUBLIC "-//NLM//DTD esearch 20060628//EN" "https://eutils.ncbi.nlm.nih.gov/eutils/dtd/20060628/esearch.dtd">

<esearchresult><count>31236</count><retmax>20</retmax><retstart>0</retstart><idlist>
<id>37878682</id>
<id>37873546</id>
<id>37873494</id>
... # omitting many results
<id>37786662</id>
<id>37780106</id>
<id>37776368</id>
</idlist><translationset><translation> <from>Machine Learning</from> <to>"machine learning"[MeSH Terms] OR ("machine"[All Fields] AND "learning"[All Fields]) OR "machine learning"[All Fields]</to> </translation></translationset><querytranslation>(
### 爬虫技术在SCI论文中的应用与研究 #### 数据获取的重要性 对于科学研究而言,数据的质量直接影响研究成果的价值。利用爬虫技术可以从互联网上自动收集大量公开可用的研究资料,包括但不限于医学论文、临床试验报告和其他形式的学术资源[^1]。 #### 百度学术作为数据源之一 百度学术提供了一个强大的平台用于搜索各类学术文章,不仅限于开放存取的文章也涵盖了部分需付费访问的内容。该搜索引擎允许用户依据多种条件精确查找所需的文献,例如发表年份、关键词匹配程度以及作者身份验证等方面的信息过滤功能有助于缩小范围并找到最相关的结果[^2]。 #### 实现具体案例——基于Sci-Hub构建简易爬虫 为了更直观地了解这一过程的工作原理,下面给出了一种简单的方法来创建一个能够批量下载指定DOI编号对应PDF文档的小型应用程序。此程序会先向目标网站发起请求获得HTML响应体;接着解析其中含有实际文件链接的部分;最终实现自动化保存至本地磁盘的功能[^3]: ```python import requests from bs4 import BeautifulSoup as soup def get_pdf_url(doi): base_url = 'https://sci-hub.se/' response = requests.get(f'{base_url}{doi}') page_soup = soup(response.text, "html.parser") iframe = page_soup.find('iframe') if not iframe: raise Exception("Failed to locate PDF URL") return iframe['src'] if __name__ == '__main__': doi_list = ['10.1098/rspb.2020.2754', ... ] # 用户自定义DOI列表 for item in doi_list: try: pdf_link = get_pdf_url(item) print(pdf_link) with open(f"{item}.pdf", "wb") as f: resp = requests.get(pdf_link) f.write(resp.content) except Exception as e: print(e) ``` 这段脚本展示了如何通过给定的DOI号查询对应的全文链接,并将其存储下来供后续分析使用。需要注意的是,在实际操作过程中应当遵循各数据库的服务条款,尊重版权法规,合理合法地运用此类工具辅助个人学习或科研工作。 #### 科研数据分析效率提升 除了直接抓取完整的电子版期刊外,还可以针对某些特定字段(如摘要、图表等)进行定制化采集,以便更好地服务于后期的数据挖掘任务。例如当面对复杂多样的实验记录时,借助编程手段可以快速定位感兴趣区域内的数值变化趋势,进而完成统计检验或是可视化呈现等工作流程,极大地提高了工作效率和准确性[^4]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bio大恐龙

您的打赏是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值