💽基于知网数据挖掘—Python爬虫
00 分钟
2022-1-20
2023-9-1
type
status
date
slug
summary
tags
category
icon
password
Last edited time
Sep 1, 2023 04:40 AM
Created time
Apr 27, 2023 04:06 AM
💡
本文介绍了使用Python爬虫爬取知网数据的过程。首先,我们需要了解需要爬取的数据类型,这有助于我们更好的了解数据源。接下来,我们通过POST请求来发送请求并获取数据。在获取数据的过程中,我们可以使用一些数据清洗技巧,例如去重、筛选等。然后,我们对获取到的网页进行解析,提取出所需的数据。这里需要注意的是,我们需要确保数据的准确性和完整性。最后,将爬取到的数据存储到本地文件中。除此之外,我们还可以通过可视化展示来更好的了解数据的情况。例如,我们可以将文献类型、作者、机构、关键词、下载量和引用量等信息进行可视化展示,这有助于我们更加直观地了解数据的情况,甚至可以发现一些规律和趋势。

说明摘要

爬虫模块:使用BeautifulSoup,etree,requests,json和pandas扩展库对知网关键词搜索获取论文列表存入为csv文件。搜索关键词为“人工智能”和“大数据”,也可以输入其他关键词进行爬取。总共爬取255771篇论文。
数据处理:对爬去到的论文数据进行处理,1、是对重复项进筛选,并且把重复内容进行删除。2、是对关键词进行划分,关键词保留第一关键词。3、人工智能相关论文和大数据相关论文进行合并存为csv文件。如果需要存进MySQL也可以进行存储。
数据展示:1、总体情况的展示,分为研究层次、文献来源、论文类型、论文引用情况、总体趋势、学科分类和关键词分布7个图表展示形式。2、学术论文的展示,分为博士论文学校分布、硕士论文学校分布、学术论文总体情况、学科分布、学术论文总体趋势、主要关键词分布、博士论文导师学生发文和硕士论文导师学生发文情况8个图表形式。3、期刊的展示,分为期刊发文组织分布、研究热词分布、期刊学科分布和期刊关键词分布4个图表的形式。4、人工智能和大数据对比展示,分为大数据和人工智能历年来的发文情况、相关top论文列表、学科分类和发文类型4个图表的形式。

详细说明

爬虫模块

首先打开知网空间网页,url:https://search.cnki.com.cn/,转到开发者模式,用F12按钮或者按Ctrl+Shift+C打开开发者模式,之后搜索框输入关键词‘大数据’,点击文献类型,点击期刊,开发者模式点击‘网络监视器’,监视类型为‘XHR’,我们可以发现筛选器的文件类型是‘ArticleFilter’,点击POST地址为https://search.cnki.com.cn/api/FileterResultApi/ArticleFileter列表,在右侧中点击‘请求’,可查看POST数据字段,如下图所示。
 
notion image
用上述POST地址,我们可获取文献类型,学科分类和研究层次类型。
通过观察POST请求,为了获取文献类型JSON结果,只需要传入以下这几个字段,{'searchType': 'MulityTermsSearch', 'ParamIsNullOrEmpty': 'false','Islegal': 'false', 'KeyWd': '大数据', 'ExcludeField': 'Type'},josn结果如下图所示,通过对json文件的处理获取文献类型的TypeCode,FilterName。
notion image
notion image
获取到上表中的TypeCode,作为学科分类的POST需求传入获取json结果。POST传输字段如下,
{'searchType': 'MulityTermsSearch', 'ParamIsNullOrEmpty': 'false','Islegal': 'false', 'KeyWd': '大数据', 'ExcludeField': "Subject", 'Type': 文献类型返回的TypeCode,'ArticleType': 文献类型返回的TypeCode},获取结果如下。获取到的TypeCode传入到研究层次POST需求中。
notion image
研究层次的POST需求,
{'searchType': 'MulityTermsSearch', 'ParamIsNullOrEmpty': 'false','Islegal': 'false', 'KeyWd': keyword, 'ExcludeField': "Level", 'Type': 文献类型TypeCode,'ArticleType': 文献类型TypeCode, 'Subject': 学科分类TypeCode}。
上述3次操作是为了获取筛选文献类型、学科分类和研究层次3个的传输TypeCode,并且同时传入url为https://search.cnki.com.cn/Search/ListResult,POST请求为
{'searchType': 'MulityTermsSearch', 'ArticleType': itype['TypeCode'], 'ParamIsNullOrEmpty': 'false','Islegal': 'false', 'KeyWd': '大数据', 'Type': 文献类型TypeCode, 'Order': '1', 'Page': page, 'Subject': 学科分类TypeCode, 'Level': 研究层次TypeCode},获取结果为文献类型,学科分类和研究层次3个筛选器都选中的论文列表。我们代码中的模拟如下图所示一致。
notion image
上述两个不同url获取结果用request.post()方法,传入所需url和data,data传入的是POST请求,返回text。代码如下。
解析网页:如下图所示选择需要爬取的内容,定位并检查元素,选择HTML代码右键复制xpath,通过etree获取对应的内容,以论文名称和论文url为例,对应的xpath代码需要处理成'//div[@class="lplist"]/div['+str(num)+']/p[1]/a[1]/@href'和'//div[@class="lplist"]/div['+str(num)+']/p[1]/a[1]/@title',num是1-20的数字,是一个显示页面中论文的数量,依次递增去调用不同论文的论文url和论文名称。
 
notion image
 
notion image
notion image
上表就是每个字段的xpath处理后的地址,我们通过etree的xpath对这些地址解析获取需要的字段信息。其中Totur为导师名称,只在硕士论文和博士论文列表中有这个字段,所以其他类型论文中我们赋值’-‘,Organization和Public在不同论文类型中有不同的xpath地址,在爬取过程中进行处理。上述处理并获取html中我们想要内容的代码如下。

数据存储

我们遍历获取列表中论文相关字段之后,对获取的内容进行存储,目前是先以追加的方式存入本地csv文件中,目的是为了防止程序出错跳出后丢失内容,代码如下。
我们爬取了’大数据‘和’人工智能‘两个关键词的所有论文,并且存到本地的两个csv文件中。首先读取本地的两份csv文件,并且合并为同一个DataFrame,对Downloads和Quote进行处理,论文列表中这两个字段对应下载和引用,如下图所示。
notion image
把中文字和左右括号去掉,对keywords进行第一个keywords的获取,最终进行去重并存进新的csv文件中。

可视化展示-Tableau Desktop

在Tableau中我们以文本格式数据加载的方式加载已经处理好的csv文件,并且按照需求画出数据图表,效果如下图4张图。
notion image
notion image
notion image
notion image
上述四个仪表盘放入同一个故事中,点击不同图表会相应筛选其他图表展示不同的内容,作为论文文献研究的可视化分析工具。除了’大数据‘和’人工智能‘这两个关键词之外,我们还能研究其他关键词的论文近几年的发文情况。
ℹ️
如果您有更多的见解和想法,请在评论区与我分享!您的意见对我来说非常重要。

评论