一、前言
每当我们临近毕业要写论文的时候,就需要从知网查找大量的文献。但去知网一条一条进去看摘要又略显麻烦和浪费时间。于是,反手写一个爬虫,批量获取基本信息,那不是轻松许多?
在开始这个项目之前,我抱着不重复造轮子的心态,寻思着去Github先找找。结果发现基本上都是几年前的项目,现在早已不能使用。最后证实了,靠别人不如靠自己,撸起袖子就开干!
1. 爬虫基础
网络爬虫就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
目前爬虫主要分为以 requests 库为代表的模拟请求类爬虫和以 selenium 为代表的模拟浏览器用户行为的爬虫两类。:
- Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。
- Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。
中国知网作为国内最知名的文献数据库之一,有着复杂的反爬虫机制,包括:动态JS、iframe、验证码等等。直接模拟请求难度较大,且容易被封IP地址,所以本文主要介绍如何使用Selenium来爬取知网。
2. Selenium基本用法
声明浏览器对象
Selenium支持非常多的浏览器,如Chrome、Firefox、Edge等,我们只要首先下载好相应浏览器的webdriver到python主目录中,或者加入环境变量即可。
不同浏览器的初始化:
访问页面
我们可以用get()方法来请求一个网页,传入参数链接URL
查找元素
在element变成elements就是找所有满足的条件,返回数组。
基础爬虫的JAVA论文 另外,我经常使用的查找元素方法为selenium中selenium.webdriver.common.by的By, 联合隐士等待EC
用法如下:
常用方法
在找到相应元素位置后,我们常用的交互动作包括:点击、输入、清楚、获取属性、获取文本等
还有大量的方法这里没有提及,不过有了以上基本知识,我们就可以开始项目了!
二、知网爬虫实战
1. 知网页面元素分析
知网首页中,我们仅需要先在输入框中键入主题词,然后点击搜索图标,即可跳转到结果页面。
我们通过浏览器的检查页面,得到输入框和搜索图标的XPATH分别为:
我们只需要在输入框键入我们要搜索的主题,然后操作搜索按钮即可转到结果页。以搜索Python为例,结果页如下所示,共找到15,925条,300页。每页中包含20个条目,每个条目包含题目、作者、来源等信息。
通过对当前页面分析,发现每个条目对应的的xpath的规律。
即倒数第二个标签数字代表本页的第几个条目,最后一个标签 2 - 6 分别代表题目、作者、来源、发表时间和数据库。
我们在当前页面无法或者文献的摘要信息,下载链接等等,需要进一步点击进入相关文献条目。
进入详情页面后,我们根据class name:abstract-text 能够很容易定位到摘要的文本,class name: btn-dlcaj 定位到下载链接,其他元素同理。
完成以上知网页面的分析后,我们就可以根据需求开始写代码了!
2. 代码示例
引用所需要的包
创建浏览器对象
这里我们创建一个Chrome浏览器的窗口,并设置相关参数:
打开页面并搜索关键词
解析结果页
至此,所有功能都已实现,代码中写了详细的注释。
结果展示
结果是一个以制表符分隔的表格文件,其中包含了论文的基本信息,包括:题目、作者、来源、摘要、链接等
三、遇到的一些坑
1. 网页加载太慢导致元素查找出错
有时候我们并不需要网页完全,我们想要的信息已经加载出来,于是加上以下设置:
另一方面,在适当的地方加上 time.sleep(3) 延时几秒,既可以等待页面加载,也可以防止爬取太快被封IP。
2. 编码不同导致的文件写入失败
在写入文件时,由于存在不同的编码,常常导致文件写入失败,在最开始我转换编码为 utf-8 ,后来发现这个编码在excel里面居然是乱码,于是改为 gbk 编码。
3. xpath 地址经常发生改变
由于知网中包含着不同类型的文献,如期刊、硕博、会议、专利 等,xpath的位置不是一成不变的,虽然xpath唯一定位的特性便于我们找到相应的标签。但偶尔class name 或许是更好的选择。
四、后记
在数据分析中,往往花费时间的事数据的获取和数据清洗,怎样从互联网海量的数据中高效获取我们想要的部分?无疑网络爬虫是**的选择之一。学习好爬虫的相关库的运用,不论是从或联网上获取相关的数据,还是设置某些东东提交任务,甚至是写一些抢票软件都不是什么困难的事情。
另一方面,爬虫与网站的反爬系统一直都是攻防的双方,Selenium 这类软件能够直接模拟浏览器操作,进而绕过一些反爬机制,但并不是不能够被网站识别。在真实的情况中,我们往往需要结合多种手段爬取网页。
在这场爬虫和反爬虫的军备竞赛中;在人与计算机的竞赛中,我们只有不断地学习新的东西,才能在这场进化中不被淘汰。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/25488.html