https://github.com/bitcs-information-retrieval-2021-2022/project1-water
project1-water created by GitHub Classroom
https://github.com/bitcs-information-retrieval-2021-2022/project1-water
Science Score: 49.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 3 DOI reference(s) in README -
✓Academic publication links
Links to: sciencedirect.com, springer.com, acm.org -
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (3.5%) to scientific vocabulary
Repository
project1-water created by GitHub Classroom
Basic Info
- Host: GitHub
- Owner: BITCS-Information-Retrieval-2021-2022
- Language: Python
- Default Branch: main
- Size: 672 KB
Statistics
- Stars: 4
- Watchers: 0
- Forks: 1
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Project 1 - Water Academic Crawler
本项目实现了一个学术网站爬虫,支持爬取ACM Digital Library、SpringerLink和ScienceDirect的论文数据并下载论文pdf及视频附件(如果提供),提供可视化界面供用户查询。
爬虫部分
原理框架

依赖项
| 软件/库 | 版本 | | :------------------------------------------: | :----: | | python | 3.10 | | MongoDB | 5.0.3 | | Scrpay | 2.5.1 | | pymongo | 3.12.1 |
功能介绍
- 实现低耦合的爬虫框架
本项目绝大多数功能特性通过重写Scrapy框架中的pipeline或middleware
实现,事实上本项目中三个爬虫也完全使用同一套框架,尽可能保持了可复用与灵活性。故如果想为该爬虫框架添加新的数据源,只需要为该数据源设计相应的spider和数据处理item即可。
- 支持爬取三种数据源的论文数据并下载论文pdf及视频附件(如果提供),支持爬取的信息如下:
| 字段名 | 含义 | 类型 | | :------------: | :--------------------------------: | :------------: | | title | 论文标题 | 字符串 | | abstract | 论文摘要 | 字符串 | | authors | 作者列表 | 字符串列表 | | doi | 论文doi | 字符串 | | url | 论文主页 | 字符串 | | year | 论文发表年份 | 字符串 | | month | 论文发表月份 | 字符串 | | type | "conference"、"journal"或"unknown" | 字符串 | | venue | 会议或期刊的名称 | 字符串 | | source | 数据源 | 字符串列表 | | videourl | 视频在线播放链接 | 字符串 | | ~~videopath~~ | ~~视频下载到本地后的文件路径~~ | ~~字符串~~ | | thumbnailurl | 视频缩略图链接 | 字符串 | | pdfurl | PDF链接 | 字符串 | | pdf_path | PDF下载到本地后的文件路径 | 字符串 | | inCitations | 该论文被引用的数量 | 字符串 | | outCitations | 该论文所引用的论文数量 | 字符串 |
- 将论文数据存储到MongoDB中,数据示例如下:
json
{
"_id": "d6c904b5e7842672b974f1a159ea31d9",
"title": "Who's In Control? On Security Risks of Disjointed IoT Device Management Channels",
"abstract": "...",
"authors": [
"Yan Jia",
"Bin Yuan",
"Luyi Xing",
"Dongfang Zhao",
"Yifan Zhang",
"XiaoFeng Wang",
"Yijing Liu",
"Kaimin Zheng",
"Peyton Crnjak",
"Yuqing Zhang",
"Deqing Zou",
"Hai Jin"
],
"doi": "https://doi/10.1145/3460120.3484592",
"url": "https://dl.acm.org/doi/10.1145/3460120.3484592",
"year": "2021",
"month": "11",
"type": "conference",
"venue": "CCS '21: Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security",
"source": [
"ACM"
],
"video_url": "https://dl.acm.org/action/downloadSupplement?doi=10.1145%2F3460120.3484592&file=CCS21-fp326.mp4",
"thumbnail_url": "https://videodelivery.net/eyJraWQiOiI3YjgzNTg3NDZlNWJmNDM0MjY5YzEwZTYwMDg0ZjViYiIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI2NTU1Yjg2ZmI0NGJhZjQ1MjIyNDFhMmNlNzI0OTA2YSIsImtpZCI6IjdiODM1ODc0NmU1YmY0MzQyNjljMTBlNjAwODRmNWJiIiwiZXhwIjoxNjM4MzA1NzQ1fQ.uZj7i7RIiySy5Avp0EYvDmEF9kdBqVrLzG_IfQYMGN5VtQN0mYCvjsuB7eHSnNVjPe1jF8PfByqECcW6S4OsbJ0qdjzkdWF0c9Uj7ew4gp-yT4pJQ7Eciywy2J-Geon5J53RYw1lQacQT2SohnKZ7KzsLD8m5Kfy9g85aUuseVEbKckEpvwWY0mkPEaPdB0WAwK46wbEELnNdsOuXErRpff9C-pRObbwU1CrK3c-5HEFvsr8vHnDVkhzuXfDBrkSekhPqwefH6djpvyjl-OemfzKhjlybVgJXuZ6qJE-BBPXLPfwJNudOf_a1TBEd59HSaZoVCBYxEBfv8zifyIk6g/thumbnails/thumbnail.jpg?time=10.0s",
"pdf_url": "https://dl.acm.org/doi/pdf/10.1145/3460120.3484592",
"pdf_path": "storage/pdf/Whos_In_Control_On_Security_Risks_of_Disjointed_IoT_Device_Management_Channels.pdf",
"inCitations": "0",
"outCitations": "72"
}
- 针对多个数据源中重复的论文,将其合并为一条数据,补全其他数据源中可能缺少的字段
- 支持增量式爬取
- 针对三种数据源设计相应规则,保证爬取结果不重不漏
- ACM Digital Library:根据ConceptID遍历爬取其中的论文
- Springer Link:首先爬取Springer Link中Conference Paper下子领域列表,同时结合年份爬取具体论文
- ScienceDirect:通过
ScienceDirect API爬取,该方法不提供按会议/期刊分割的论文列表,需要提供关键词对于数据库进行检索。故关键词的选择策略会对爬取到内容的质量产生较大的影响。在本项目中,通过设置关键词对论文题名进行检索,可以将该爬虫爬取的问题规约到图搜索问题,其中节点为论文信息。设计启发式搜索方式如下:- 初始化一个较为有代表性的关键词(如Transformer、Covid-19、Cell)等等,对数据库进行检索
- 对检索到的论文题目进行分词处理,去除无意义的助词(如A、the、of)等建立优先队列,优先关键字为词语出现的次数
- 对优先队列中的关键词有以下两种考量。综合考虑,本项目选择超参数λ = 0.1 ,即在选择下一个关键词时有0.9的概率选择当前优先队列中队头的关键词,进行深度挖掘,有0.1的概率选择当前优先队列中队尾的关键词
- 如果一个词语出现的频率越高,说明词语与当前检索的关键词关系越密切,对于该关键词进行搜索的结果大多会和当前的搜索结果相关,是对当前知识领域的纵向挖掘过程
- 如果一个词语出现的频率低,说明词语与当前检索关键词关系不大,对于该关键词进行搜索的结果更可能和当前的搜索结果完全不同,是对知识领域之间的横向扩展过程
- 利用Scrapy框架自身多线程技术、数据源提供的API等手段提高爬虫效率
- 支持通过代理方式抵御网站反爬手段
- 设置检查点,支持断点续爬
- 实时展示爬取进度
使用方法
- 安装必备软件及依赖项
bash
pip install scrapy==2.5.1
pip install pymongo==3.12.1
- 建立本地存储目录
参照storage_example结构建立storage目录
- 编辑配置文件
- 有关数据库及其他项目参数的配置参见
/water_academic_crawler/water_academic_crawler/settings.py中各配置项 - 有关任务进度的配置请参见
/storage_example/checkpoints下各文件
- 启动爬虫
```bash cd wateracademiccrawler
source的取值应为ACM、Springer或ScienceDirect之一
scrapy crawl
- 停止爬虫
- 达到设定的终止条件爬虫自动终止
- 两次输入
Ctrl+C可强制停止,重新输入启动命令可断点续爬
运行截图


可视化界面部分
功能
1.Discover
KQL(kibana查询语言)查询
基于条件筛选
2.Dashboard展示
依赖开源框架
| 软件/库 | 版本 | | :-------------------------------------------------------: | :----: | | elasticsearch | 7.15.1 | | kibana | 7.15.1 | | monstache | 6.77 |
运行截图
1.Discover
- KQL

- 筛选

2.Dashboard




项目结构
project1-water
│ .gitignore # 指定不需要添加到版本管理中的文件
│ README.md # 项目README
│
├─storage-example # 示例
│ │ SpringerSubDiscipline.txt # Springer Link中待爬取的关键词列表
│ │
│ ├─checkpoints # 检查点,记录各任务当前进展
│ │ ACM.json # ACM Digital Library
│ │ ScienceDirect.json # ScienceDirect
│ │ Springer.json # Springer Link
│ │
│ ├─pdf # 下载的pdf将位于本目录
│ │
│ └─video # 下载的视频将位于本目录
│
└─water_academic_crawler ##爬虫项目
│ scrapy.cfg
│
└─water_academic_crawler
│ items.py # 定义存储爬取到的数据的容器
│ middlewares.py # 包含下载器中间件和爬虫中间件模型的代码
│ pipelines.py # 管道组件的代码
│ settings.py # 爬虫项目的设置文件
│ util.py # 项目中用到的工具方法
│ __init__.py
│
├─proxy
│ proxy.json # 代理列表
│
├─spiders # 爬虫
│ │ ACM.py # ACM Digital Library
│ │ CrawlProxy.py # 爬取代理服务器地址
│ │ ScienceDirect.py # ScienceDirect
│ │ Springer.py # Springer Link
│ │ __init__.py
│ │
│ └─__pycache__
│ ...
│
└─__pycache__
...
成果总结
- 论文总数 4,848,967
- ScienceDirect 3,312,967
- Springer 1,281,058
- ACM 261,284
- 下载pdf
- 89,913篇
- 117 GB
- 字段覆盖率
| 字段 | 文档数 | 总文档数 | 覆盖率 | | ------------------------- | ----------------- | -------- | ------- | | title | 4848967 | 4848967 | 100.00% | | abstract1 | 1478904 | 1536000 | 96.28% | | authors | 4846690 | 4848967 | 99.95% | | doi | 4848953 | 4848967 | 100.00% | | url | 4848967 | 4848967 | 100.00% | | year | 4169210 | 4848967 | 85.98% | | month | 4169283 | 4848967 | 85.98% | | type | 2727229 | 4848967 | 56.24% | | venue | 4847277 | 4848967 | 99.97% | | source | 4848967 | 4848967 | 100.00% | | videourl2 | 11237 | 261284 | 4.30% | | videopath3 | 0 | 261284 | 0.00% | | thumbnailurl2 | 11237 | 261284 | 4.30% | | pdfurl | 4707514 | 4848967 | 97.08% | | pdf_path2 | 862764 | 261284 | 33.02% | | inCitations | 261274 | 4848967 | 5.39% | | outCitations | 1541878 | 4848967 | 31.80% |
注1:ScienceDirect API不提供摘要,数据统计中去除来源为ScienceDirect的文档
注2:仅在来源含ACM的文档中统计
注3:本项目爬取过程全程未启用视频下载功能
注4:文件合并过程中发现存在同名情况
Owner
- Name: BITCS-Information-Retrieval-2021-2022
- Login: BITCS-Information-Retrieval-2021-2022
- Kind: organization
- Repositories: 1
- Profile: https://github.com/BITCS-Information-Retrieval-2021-2022