Metadata-Version: 2.1
Name: CnkiSpider
Version: 1.0.9
Summary: CnkiSpider是一个高效爬取知网文章信息的包
Home-page: https://github.com/zemengchuan/CnkiSpider
Author: zemengchuan
Author-email: zemengchuan@gmail.com
License: MIT
Keywords: CNKI,webcrawler,data,lxml
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests
Requires-Dist: pandas

# CnkiSpider使用指南（by@zemengchuan）
GitHub链接：https://github.com/zemengchuan/CnkiSpider

## 用途：

CnkiSpider可以通过简单的代码实现高效的知网文章信息爬取，主要爬取的内容包括：【**标题、作者、发表时间、来源、链接**】，并将爬取的结果保存为CSV格式。经测试，某作者在知网上的821篇文章只需要2-4s即可全部获取（不同设备及网络情况可能会出现差异），效率相对而言比较高。

CnkiSpider的高效来自于采用了多线程的方式进行爬取。目前仅实现了**通过作者**的方式查询，将来还会持续更新通过其他的方式（如主题、篇关摘、关键词等）方式，还计划实现相关的图表分析功能，现在先将实现的部分上传供大家使用

## 优点

使用简单，效率较高

## 缺点

- 不够灵活，必须有作者的姓名、代码和第一机构才可以搜索，不能仅通过作者名字搜索（CnkiSpider设有专门的函数帮助确认作者的代码和第一机构，详情见使用方式）
- 目前仅支持中文搜索，英语搜索可能会出现问题
- 目前仅支持通过作者搜索

## 安装方式

```python
pip install CnkiSpider
```



## 使用方式

### 1、AuthorSpider

#### 基本介绍

目前只有AuthorSpider()这一个类，也就是仅支持通过作者进行搜索。下面来介绍Author可以使用的方法和属性：
- 基本参数

	`cas = CnkiSpider.AuthorSpider(author_name,author_code='',institution='')`
	author_name：作者姓名，必填
	author_code：作者代码，选填
	institution：作者第一机构，选填
- 属性：
	`cas.name`作者姓名
	`cas.code`作者代码
	`cas.institution`作者第一机构
	`cas.path`文件存放路径
	`cas.session`爬虫session（带有cookies）
- 方法：
	`cas.getinfo(save=True)`获取概览信息，默认保存在cas.path路径下的overview.csv文件中
	`cas.author_recommend()`如果作者信息不完整（如缺少代码、缺少第一机构），可以用这个方法补全
	`cas.get_all_article()`获取当前作者的所有文章，并保存在cas.path路径下的result.csv文件

#### 使用方式

如果知道需要爬取的作者的姓名、代码和第一机构，那么可以按照如下操作获取结果：

```Python
from CnkiSpider import AuthorSpider

"""
将author_name,author_code,institution三个参数传入AuthorSpider中，
再使用get_all_article()方法即可快速获取该作者的所有文章
文件保存在当前目录下，文件名为result
"""

name = '钟南山' 
code = '000039361479' 
inst = '中国工程院'
cas = AuthorSpider(author_name=name,author_code=code,institution=inst)
cas.get_all_article()
```
输出结果

```python
"""
一共有文章820篇
共需要爬取17页
====================================================================================================
正在爬取第2页……
正在爬取第3页……
正在爬取第4页……
正在爬取第5页……
正在爬取第6页……
正在爬取第7页……
正在爬取第8页……
正在爬取第9页……
正在爬取第10页……
正在爬取第11页……
正在爬取第12页……
正在爬取第13页……
正在爬取第14页……
正在爬取第15页……
正在爬取第16页……
正在爬取第17页……
第17页爬取成功！第17页有20条数据
第2页爬取成功！第2页有50条数据
第5页爬取成功！第5页有50条数据
第10页爬取成功！第10页有50条数据
第13页爬取成功！第13页有50条数据
第14页爬取成功！第14页有50条数据
第7页爬取成功！第7页有50条数据
第16页爬取成功！第16页有50条数据
第9页爬取成功！第9页有50条数据
第4页爬取成功！第4页有50条数据
第6页爬取成功！第6页有50条数据
第12页爬取成功！第12页有50条数据
第11页爬取成功！第11页有50条数据
第8页爬取成功！第8页有50条数据
第3页爬取成功！第3页有50条数据
第15页爬取成功！第15页有50条数据
====================================================================================================
爬取完成，已将结果保存至./钟南山-中国工程院-000039361479/
"""
```

- 如果仅知道姓名，那么可以按照如下操作获取结果：

```python
from CnkiSpider import AuthorSpider

"""
如果只知道姓名，那么就需要author_recommend()函数的帮助
运行按照提示确定作者的代码和第一机构即可
最后使用get_all_recomment()方法获取所有文章
如果get_all_recoment()获取的作者列表有误，可以输入re再次获取
文件保存在当前目录下
"""

cas = AuthorSpider('钟南山')
cas.author_recommend()
cas.get_all_article()

"""
author_recommend()会返回作者的姓名、代码和第一机构
如果有需要获取相关参数（姓名、代码、第一机构），可以按照如下的操作进行
"""
# cas = AuthorSpider('钟南山')
# print(cas.name,cas.code,cas.institution)
# author_name, author_code, institution = cas.author_recommend()
# print(cas.name,cas.code,cas.institution
```
输出结果

```python
"""
输出结果为：

    作者              机构
0  钟南山           中国工程院
1  钟南山
2  钟南山
3  钟南山      南昌大学第一附属医院
4  钟南山   共信医药科技股份有限公司;
5  钟南山          南风窗杂志社
6  钟南山         扎木县人民医院
7  钟南山
8  钟南山
9  钟南山  上海明品医学数据科技有限公司
请选择需要查询的作者序号(输入exit退出，输入re再次获取)：0
一共有文章820篇
共需要爬取17页
====================================================================================================
正在爬取第2页……
正在爬取第3页……
正在爬取第4页……
正在爬取第5页……正在爬取第6页……

正在爬取第7页……
正在爬取第8页……
正在爬取第9页……
正在爬取第10页……
正在爬取第11页……
正在爬取第12页……
正在爬取第13页……
正在爬取第14页……
正在爬取第15页……
正在爬取第16页……
正在爬取第17页……
第17页爬取成功！第17页有20条数据
第14页爬取成功！第14页有50条数据
第4页爬取成功！第4页有50条数据
第10页爬取成功！第10页有50条数据
第12页爬取成功！第12页有50条数据
第3页爬取成功！第3页有50条数据
第13页爬取成功！第13页有50条数据
第16页爬取成功！第16页有50条数据
第2页爬取成功！第2页有50条数据
第5页爬取成功！第5页有50条数据
第7页爬取成功！第7页有50条数据
第15页爬取成功！第15页有50条数据
第11页爬取成功！第11页有50条数据
第6页爬取成功！第6页有50条数据
第9页爬取成功！第9页有50条数据
第8页爬取成功！第8页有50条数据
====================================================================================================
爬取完成，已将结果保存至./钟南山-中国工程院-000039361479/
"""
```

- 如果希望得到该作者在知网上的文章类型概览，可以使用`.getinfo(save=True)`方法，save参数是用于选择是否需要保存概览的，默认为True，可以不填。如：

```python
from CnkiSpider import AuthorSpider

"""
getinfo()默认在当前目录下保存概览文件，如果不需要可以将save改为False，即
getinfo(save=False)。保存的文件名为overview.csv
"""

name = '钟南山' 
code = '000039361479' 
inst = '中国工程院'
cas = AuthorSpider(author_name=name,author_code=code,institution=inst)
cas.getinfo()# cas.getinfo(save=False)

```

输出结果为：

```python
"""
输出结果为：

钟南山在知网上共有记录820条，详细情况如下：
总库:820篇
学术期刊:699篇
特色期刊:8篇
学术辑刊:0篇
学位论文:0篇
博士:0篇
硕士:0篇
会议:109篇
国内会议:103篇
国际会议:6篇
会议视频:0篇
报纸:4篇
年鉴:0篇
专利:0篇
中国专利:0篇
海外专利:0篇
图书:0篇
外文图书:0篇
中文图书:0篇
标准:0篇
国家标准:0篇
行业标准:0篇
标准题录:0篇
成果:0篇
古籍:0篇
视频:0篇
"""
```

- 设置输出文件保存路径可以通过`.path=`的方式修改

```python
from CnkiSpider import AuthorSpider

name = '钟南山' 
code = '000039361479' 
inst = '中国工程院'
cas = AuthorSpider(author_name=name,author_code=code,institution=inst)
# 设置路径
cas.path = './new_dir/' 
# 修改后以下两个函数保存的文件路径都会变为设置的路径，但是输出文件的名称无法更改
cas.getinfo()
cas.get_all_article()

```

### 2、KeywordSpider

（开发中……）

### 3、TopicSpider

（开发中……）

### 4、……



## 计划

- 加入更多的搜索方式
  - 主题
  - 篇关摘
  - 关键词
  - 篇名
  - 全文
  - 第一作者
  - 通讯作者
  - 作者单位
  - 基金
  - 摘要
  - 小标题
  - 参考文献
  - 分类号
  - 文献来源
  - DOI
- 加入图表分析
- 尝试用异步的方式，或许会有更高的效率
- ……
