一个有潜力的高效获取知网信息的Python包——CnkiSpider

最近在GitHub上面看到了一个包,CnkiSpider(点击超链接即可查看),使用起来感觉还不错,是一个基于多线程方法爬取知网文章信息的包。目前仅出到1.0版本,能够支持的方法也只有通过作者进行搜索。下面来记录一下这个包的使用方法。

安装

pip install CnkiSpider

基本介绍

目前只有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文件

使用方式

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

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()

输出结果

"""
一共有文章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/
"""
  • 如果仅知道姓名,那么可以按照如下操作获取结果:
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

输出结果

"""
    作者              机构
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,可以不填。如:
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)

输出结果为:

"""
钟南山在知网上共有记录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=的方式修改
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()

结果

最后来看看爬取结果是怎么样的

  • cas.get_all_article()
    在这里插入图片描述
    可以看到,获取速度很快,八百多篇文章的信息在2-4s内即可完全获取,并保存至当前目录下。
  • cas.getinfo()
    在这里插入图片描述
    在这里插入图片描述
    概览信息的获取也比较快,不过最后文件的展示形式上其实可以去掉索引那一列,有点不大好看。不过无伤大雅,能用就行。

结语

目前这个包的功能还太少,灵活程度也不是特别足,还存在一些小bug,但表现出来的效果很不错。如果需求只有快速获取某位作者在知网上的所有文章信息的话,这个包应该是当前最好的选择了
作者目前公开的计划还包括:
在这里插入图片描述
希望不久就可以上线新的功能吧,还是很期待的

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值