自己写的基于aiohttp pandas和xpath 的pubmed文献信息爬取和下载的工具,按照你给定的参数,按你的要求获取相关的文献信息,并且下载对应文献的PDF原文
下载速度大概是1s一篇,同时能够提取文献的大部分信息,并自动生成excel文件,包括文献标题,摘要,关键词,作者名单,作者单位,是否免费,是不是review类型等信息。
自动下载后,会将部分信息储存在本地的文本文件中,供参考,检索数据会储存在sqlite3数据库中,最后执行完成后,自动导出所有信息,生成一个Excel文件。
-
基于python3.9,也支持更高版本,主要使用了pandas, xpath, asyncio, aiohttp
-
项目页面右边的Release当中有Nuitka打包成的exe执行文件,自带所有依赖,可以直接下载后在windows下命令行执行使用。
-
如果需要自己在python环境运行请根据
requirements.txt
文件安装对应的依赖
asyncio~=3.4.3
aiohttp~=3.11.8
requests~=2.32.3
lxml~=5.3.0
pandas~=2.2.3
openpyxl~=3.1.5
colorlog~=6.9.0
-
克隆项目,在命令行环境下安装项目所需的依赖文件
建议使用anaconda或者miniconda3等python虚拟环境工具
git clone https://github.com/hiddenblue/Pubmedsoso.git
cd Pubmedsoso
pip install -r requirements.txt
不方便安装git工具时,直接直接下载页面右边Release当中的ZIP解压执行
-
在terminal中切换到项目文件夹,执行
python main.py
带上关键词参数 或者在直接执行exe可执行文件pubmedsoso.exe
+ 关键词
比如
python main.py -k headache -n 5 -d 10 -y 5
-k headache
是此次运行输入的检索关键词(keyword)
如果你使用的关键字当中包含空格,请使用双引号将关键词整体围起来。 支持pubmed advance query box 比如 "headache AND toothache" 这样的包含AND NOT OR等逻辑表达的query
-n
参数后面数字指的是需要检索的页数, 每页会有50篇
-d
参数后面表示需要下载的文献的份数
-y
可选参数,后面表示你想检索的信息的年份范围,以年为单位,比如 -y 5表示近五年的文献
-
输入页数时,每页会包含50个检索结果,数字不用设置得太大,否则需要较长时间执行
-
然后输入需要下载的文献数量,程序会从搜索结果中找到free pmc 免费文献,自动下载,这里下载速度取决你的网络状况。
-
每个文献下载超过30s自动超时跳过,下载下一个。
PS > python main.py --help
usage: python main.py -k keyword
pubmedsoso is a python program for crawler article information and download pdf file
optional arguments:
--help, -h show this help message and exit
--version, -v use --version to show the version
--keyword, -k specify the keywords to search pubmed
--pagenum, -n add --pagenum or -n to specify the page number to
--year -y add --year or -y to specify year scale you would to
--downloadnum,-d a digit number to specify the number to download
--directory -D use a vaild dir path specify the pdf save directory.
--output -o add --output filename to appoint name of pdf file
--loglevel -l set the console log level, e.g debug
如果你熟悉IDE的话,可以在pycharm或者vscode等python环境下运行main.py
-
根据提示输入
y
或者n
决定是否以给定的参数执行程序
pubmedsoso会按照你正常搜索的顺序进行爬取下载
-
文献会自动下载到之前说的"document/pub/"下,同时会生成原始遍历信息的txt文件,程序最终执行完成会生成excel文件。
- WARNING
-
请勿过分爬取pubmed网站
因为本项目使用异步机制,具有很高的并发能力,访问速度等相关参数可以在 config.py
当中设置,默认数值不算太大。
-
❏ 精确地搜索下载,这个还有点难
-
✓ 自定义关键词下载,等我有空弄明白pubmed的检索参数url生成规则就行(已经实现)
-
❏ 对非免费文献的scihub自动补全下载,或许可以让用户写adapter自己实现
-
❏ 能用的gui界面
-
❏ 最好附带一个免费的百度翻译插件,有时候大家可能用得上
-
✓ 采用OOP和更加现代化的工具重构项目
-
✓ 使用异步的方式重构代码,提高执行的效率
-
✓ 可能还需要一个堪用的日志系统
-
❏ 可以做一个基于邮件的订阅-主动推送机制的主动的文献订阅功能,为用户推送最新文献
因为asyncio异步模块的特殊性,在windows下调试时会出现一些特殊的问题 如果你需要对代码进行开发 调试,需要对两处进行修改
GetSearchResult.py
当中的
try:
if platform.system() == "Windows":
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
html_list = asyncio.run(WebHelper.getSearchHtmlAsync(param_list))
如果在windows下进行调试请注释上面的条件执行语句,否则调试时生效将出错
此外项目当中多处使用的 asyncio.run()
调试时需要启用debug参数
否则会出现运行卡住, 并报 TypeError: 'Task' object is not callable
错误