papers

所属分类:数据采集/爬虫
开发工具:TypeScript
文件大小:118KB
下载次数:0
上传日期:2021-06-19 08:00:57
上 传 者sh-1993
说明:  一个针对[https: pubmed.ncbi.nlm.nih.gov网站论文的小爬虫工具](https: pubmed.ncbi.nlm.nih.gov%E7%BD%91%E7%AB%99%E8%AE%BA%E6%96%87%E7%9A%84%E5%B0%8F%E7%88%AC%E8%99%AB%E5%B7%A5%E5%85%B7)
(A small crawler tool for [https: pubmed. ncbi. nlm. nih. gov] (https: pubmed. ncbi. nlm. nih. gov% E7% BD% 91% E7% AB% 99% E8% AE% BA% E6% 96% 87% E7% 9A% 84% E5% B0% 8F% E7% 88% AC% E8% 99% AB% E5% B7% A5% E5% 85% B7))

文件列表:
.eslintrc.js (630, 2021-06-19)
.prettierrc (51, 2021-06-19)
config.yaml (1036, 2021-06-19)
nest-cli.json (64, 2021-06-19)
package-lock.json (300383, 2021-06-19)
package.json (2197, 2021-06-19)
sql (0, 2021-06-19)
sql\init.sql (3554, 2021-06-19)
src (0, 2021-06-19)
src\app.controller.ts (946, 2021-06-19)
src\app.module.ts (442, 2021-06-19)
src\app.service.ts (3528, 2021-06-19)
src\config (0, 2021-06-19)
src\config\config.entity.ts (1080, 2021-06-19)
src\config\config.module.ts (164, 2021-06-19)
src\config\config.service.ts (90, 2021-06-19)
src\http (0, 2021-06-19)
src\http\http.module.ts (156, 2021-06-19)
src\http\http.service.ts (1276, 2021-06-19)
src\main.ts (874, 2021-06-19)
src\mysql (0, 2021-06-19)
src\mysql\mysql.module.ts (160, 2021-06-19)
src\mysql\mysql.service.ts (1829, 2021-06-19)
src\util (0, 2021-06-19)
src\util\cron.function.ts (6365, 2021-06-19)
src\util\entity (0, 2021-06-19)
src\util\entity\article.entity.ts (8390, 2021-06-19)
src\util\entity\author.entity.ts (1632, 2021-06-19)
src\util\entity\keyword.entity.ts (1508, 2021-06-19)
src\util\entity\search.entity.ts (2684, 2021-06-19)
src\util\logger.functions.ts (582, 2021-06-19)
src\util\mysql.instance.ts (119, 2021-06-19)
src\util\settings.function.ts (715, 2021-06-19)
src\util\sleep.function.ts (329, 2021-06-19)
src\util\translator.ts (3459, 2021-06-19)
static (0, 2021-06-19)
static\index.html (2347, 2021-06-19)
... ...

# 爬虫工具v2.0 ## 使用方法 本工具主要依赖为: 1. 运行环境:``node v14.17.0``,但只要版本不太低就可以; 2. 一个Mysql数据库,最好数据库和爬虫工具放在同一个内网,因为读写I/O很大; 3. 良好的网络(耗费时间最多的原因)。 ## 配置步骤 0. ``git clone``本仓库代码 1. 安装node 2. 运行``npm install`` 3. 配置MYSQL,请执行以下步骤 1. 记录MYSQL的相关信息,即ip,端口,用户名,密码 2. 对应上面四项,分别配置环境变量:`MYSQL_HOST`, `MYSQL_PORT`, `MYSQL_USER`, `MYSQL_PASS` 1. 配置环境变量的方法: 2. Linux: ``x=y`` 3. Powershell: ``$env:x=y`` 3. 配置环境变量`MYSQL_DATABASE=papers` 4. 初始化数据库,使用命令:`mysql -u $MYSQL_USER -h $MYSQL_HOST -P $MYSQL_PORT -p < sql/init.sql`. **v2.0的数据库做出了修改,因此需要重新执行这一步。** 5. 如果无法执行,请自行`nc $MYSQL_HOST $MYSQL_PORT`诊断错误 4. 配置爬虫信息: 目前,需要爬取的关键字已经存放在数据库中,并且执行了上面的第三步后,就已经初始化了所有需要爬取的关键字。下文有说明如何添加新的关键字。 ## 运行 当完成上述配置后,可以使用以下命令运行: ```bash # 开发模式: npm run start:dev # 或者,使用生产模式: npm run build npm run start:prod ``` ## 爬取与翻译策略 目前,爬取已经成为了定时任务。在每次任务中,对时间范围为“昨天”进行搜索。定时任务将会每两小时触发一次,原因为PubMed的论文是陆续上传的(也就是说,不同时间搜索论文,论文的数量会改变)。可以修改``src/main.ts: line 14``的``cron``表达式来修改触发时间的策略。 另外,每当程序启动时,总是会触发一次爬取任务。 翻译是调用百度翻译api的,翻译的范围为标题和摘要。由于第三方限制,百度翻译api的调用QPS=1,如果超过这个速率,百度翻译api将会直接报错。因此,目前程序中触发“翻译”操作的事件有: 1. 爬取一篇论文完成时。此时,将会尝试调用一次翻译,如果调用失败,那么等待``2``秒(定义在``src/translator.ts: line 69``中)后,再次尝试调用一次。如果仍失败,那么视为翻译失败。 2. 前端尝试获取一篇论文的内容。策略同上。如果翻译失败,那么获取的内容为原文(英文)。 每当论文的标题或摘要被翻译后,翻译的内容将会保存在数据库中,以后如果再次需要获取翻译内容的话,就不再需要重新调用百度翻译api了。(百度翻译api有限额)。 注意,由于QPS=1很低,如果某次前端尝试请求的所有论文都没有被第一步成功翻译的话,那么可能需要等待比较长的时间才可以返回结果。 ## 新建关键词 要新建一个关键词,请向后端发送以下请求: ``` POST /search Content-Type: application/json body: { "v": "新的关键词" } ``` 关键词被新建后,会在**下一次爬取任务时**被爬取。 ## 前端界面 在启动服务后,可以访问``127.0.0.1:3000``(也可以通过外部ip访问)前端界面。 ## 数据库表说明 + Table ``search`` + 用于保存关键字 + 初始关键字已经定义在``sql/init.sql``中 + Columns: + id: 关键字序号 + v:关键字内容 + Table ``paper`` + 用于保存论文基本信息(不包括摘要) + Columns: + id: 论文序号 + origin_id: 论文在PubMed中的原始id + type: 论文类型 + publication: 发表刊物 + time: 论文发表的时间 + create_time: 行建立时间 + search_time: 搜索时指定的时间范围为哪一天 + sid: References Table ``search`` + search.id + 表明搜索的关键字 + Table ``author`` + 用于保存作者信息 + Columns: + id: 作者序号 + name: 作者名 + Table ``paper_author`` + Table ``paper`` 和 Table ``author`` 的多对多关系表 + Columns: + pid: References Table ``paper`` + paper.id + 表明所属论文 + aid: References Table ``author`` + author.id + 表明所属作者 + Table ``abstract`` + 用于保存论文的摘要, 与Table ``paper``是一对一关系 + Columns: + id: 摘要序号 + pid: Reference Table ``paper`` + paper.id + 表明论文的序号 + content: 摘要内容 + Table ``keyword`` + 用于保存所有论文Keyword + Columns: + id: keyword序号 + content: keyword内容 + Table ``paper_keyword`` + Table ``paper`` 和 Table ``keyword`` 的多对多关系表 + Columns: + pid: Reference Table ``paper`` + paper.id + 表明所属论文 + kid: Reference Table ``keyword`` + keyword.id + 表明所属关键字 + Table ``settings`` + 一个在**v2.0**中没有使用的表 + Table ``translation`` + 保存所有翻译结果 + Columns: + md5sum: 原文的md5摘要结果 + content: 翻译结果 + 后端接口文档: ``` https://documenter.getpostman.com/view/10524259/TzeWGnnc ```

近期下载者

相关文件


收藏者