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](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F161ee7db-e7d9-4887-97b4-82a2a2802437%2FUntitled.png?table=block&id=9ba3d0d3-5a75-46c6-b9d1-dbdb7696f639)
用上述POST地址,我们可获取文献类型,学科分类和研究层次类型。
通过观察POST请求,为了获取文献类型JSON结果,只需要传入以下这几个字段,{'searchType': 'MulityTermsSearch', 'ParamIsNullOrEmpty': 'false','Islegal': 'false', 'KeyWd': '大数据', 'ExcludeField': 'Type'},josn结果如下图所示,通过对json文件的处理获取文献类型的TypeCode,FilterName。
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fed64e993-acd3-4bd8-abbe-0a80462bb983%2FUntitled.png?table=block&id=73c3772d-70c9-4cc9-a3e1-861880fce8c7)
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ff3d65486-e216-4f60-b647-bbd5bfc1ffe9%2FUntitled.png?table=block&id=8265d426-885d-466d-950b-49a8609e1a88)
获取到上表中的TypeCode,作为学科分类的POST需求传入获取json结果。POST传输字段如下,
{'searchType': 'MulityTermsSearch', 'ParamIsNullOrEmpty': 'false','Islegal': 'false', 'KeyWd': '大数据', 'ExcludeField': "Subject", 'Type': 文献类型返回的TypeCode,'ArticleType': 文献类型返回的TypeCode},获取结果如下。获取到的TypeCode传入到研究层次POST需求中。
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F711de607-e270-48e7-82ab-acbc00c6de63%2FUntitled.png?table=block&id=4ce0abbf-89ed-415b-9eff-5c446dd103ec)
研究层次的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](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fcee413b6-1fc3-4ff5-b090-1291094ff01f%2FUntitled.png?table=block&id=3fbd5307-6e53-4611-bcea-545d7e49e06a)
上述两个不同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](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe753ba4f-62c9-413f-9eb0-c8785326630a%2FUntitled.png?table=block&id=5ebf740c-0429-40e2-a1dc-2a136e8a5b2b)
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F055ed541-be9f-449c-8674-ebc47d12c725%2FUntitled.png?table=block&id=615f0844-2c32-44e2-87a7-6dd7dc8fb929)
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb35fb78d-4ae9-4dcf-ad7d-c68be0b2db7d%2FUntitled.png?table=block&id=a05d1917-430e-4f03-bb66-3994ac316b51)
上表就是每个字段的xpath处理后的地址,我们通过etree的xpath对这些地址解析获取需要的字段信息。其中Totur为导师名称,只在硕士论文和博士论文列表中有这个字段,所以其他类型论文中我们赋值’-‘,Organization和Public在不同论文类型中有不同的xpath地址,在爬取过程中进行处理。上述处理并获取html中我们想要内容的代码如下。
数据存储
我们遍历获取列表中论文相关字段之后,对获取的内容进行存储,目前是先以追加的方式存入本地csv文件中,目的是为了防止程序出错跳出后丢失内容,代码如下。
我们爬取了’大数据‘和’人工智能‘两个关键词的所有论文,并且存到本地的两个csv文件中。首先读取本地的两份csv文件,并且合并为同一个DataFrame,对Downloads和Quote进行处理,论文列表中这两个字段对应下载和引用,如下图所示。
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F676b5cc3-fa27-474a-813f-54510d1e8903%2FUntitled.png?table=block&id=bb18eeab-21df-494a-a01d-c9b863c1fdd6)
把中文字和左右括号去掉,对keywords进行第一个keywords的获取,最终进行去重并存进新的csv文件中。
可视化展示-Tableau Desktop
在Tableau中我们以文本格式数据加载的方式加载已经处理好的csv文件,并且按照需求画出数据图表,效果如下图4张图。
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F2b14ef78-2767-4175-b6af-70e9c2cd0950%2FUntitled.png?table=block&id=35577418-2c21-40da-9e50-fe1bfd72f412)
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F81a6e617-19a8-42df-8b28-795451f1ea15%2FUntitled.png?table=block&id=cc370155-b808-4d48-ab13-78bc247de601)
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fcc498b0c-a0a6-4610-87ac-76de58062c41%2FUntitled.png?table=block&id=9fd4d648-1129-4272-94e0-1e0d2b232c8e)
![notion image](https://geniusss.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4dcf46b3-c6bb-4799-94ae-940ce4f6a96b%2FUntitled.png?table=block&id=7cf47e7e-c088-4fab-b3fa-d139c76bda47)
上述四个仪表盘放入同一个故事中,点击不同图表会相应筛选其他图表展示不同的内容,作为论文文献研究的可视化分析工具。除了’大数据‘和’人工智能‘这两个关键词之外,我们还能研究其他关键词的论文近几年的发文情况。
如果您有更多的见解和想法,请在评论区与我分享!您的意见对我来说非常重要。
- 作者:Chance Sha
- 链接:https://www.chancesha.com/article/based-on-howNet-data-mining-python-crawler
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。