哈工大深圳计算机学院老师信息的爬取
目录
1.实验目标概述
2.实验环境配置
3.实验过程
3.1Scrapy框架的使用介绍
3.1.1Scrapy架构图
3.1.2 Item Pipeline
3.1.3Spider
3.1.4 Settings
3.1.5 Scrapy运作流程
3.1.6 制作Scrapy爬虫步骤
3.2 实验流程
3.2.1 新建项目
3.2.2 设置目标
3.2.3 制作爬虫
3.3 实验结果及数据库设计
4. 个人心得
1.实验目标概述
本次作业要求学习、理解爬虫技术并进行简单地应用。
- 利用爬虫爬取学院官网老师的简历信息, 可以使用例如scrapy的爬虫框架 (http://cs.hitsz.edu.cn/szll/qzjs.htm);
- 将爬取的信息进行清理(也可以在爬取的时候就定义好匹配规则), 然后将爬取的数据存入一个合理设计表项的数据库,对应简历中的各项信息:例如姓名、任职、电话等等;
- 完成实验报告,介绍爬虫的基本原理以及使用的基本方法、实验流程和实验心得等。
2.实验环境配置
Win10 + Scrapy 2.4.1 + python3.6.6 + MySQLdb
3.实验过程
3.1Scrapy框架的使用介绍
- Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。
- 用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常方便。
- Scrapy 使用了 Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。
3.1.1Scrapy架构图
- Scrapy Engine(引擎): 负责
Spider
、ItemPipeline
、Downloader
、Scheduler
中间的通讯,信号、数据传递等。 - Schduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader
(下载器)
:负责下载Scrapy Engine(
引擎)
发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(
引擎)
,由引擎
交给Spider
来处理- Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
- Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
- Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
- Spider Middlewares(Spider中间件):可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)。
3.1.2 Item Pipeline
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。
每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃而存储。以下是item pipeline的一些典型应用:
- 验证爬取的数据(检查item包含某些字段,比如说name字段)
- 查重(并丢弃)
- 将爬取结果保存到文件或者数据库中(本次实验将结果保存到文件中,代码见后续分析)
为了启用Item Pipeline组件,必须将它的类添加到 settings.py文件ITEM_PIPELINES 配置。本次实验的配置如下所示
分配给每个类的整型值,确定了他们运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内(0-1000随意设置,数值越低,组件的优先级越高)
3.1.3Spider
Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。
class scrapy.Spider
是最基本的类,所有编写的爬虫必须继承这个类。
主要用到的函数及调用顺序为:
__init__()
: 初始化爬虫名字和start_urls列表start_requests() :调用make_requests_from url()
:生成Requests对象交给Scrapy下载并返回responseparse()
: 解析response,并返回Item或Requests(需指定回调函数)。Item传给Item pipline持久化 , 而Requests交由Scrapy下载,并由指定的回调函数处理(默认parse()),一直进行循环,直到处理完所有的数据为止。
3.1.4 Settings
Scrapy设置(settings)提供了定制Scrapy组件的方法。可以控制包括核心(core),插件(extension),pipeline及spider组件。比如 设置Json Pipeliine、LOG_LEVEL等。
- DEPTH_LIMIT:默认0,爬取网站最大允许的深度(depth)值。如果为0,则没有限制。
- DOWNLOAD_TIMEOUT:默认:180,下载器超时时间(单位: 秒)。
ITEM_PIPELINES
:
默认
{}。保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意,不过值(value)习惯设置在0-1000范围内,值越小优先级越高。- LOG_ENABLED:认: True。是否启用logging。
- LOG_ENCODING:认: 'utf-8',logging使用的编码。
- LOG_LEVEL:认: 'DEBUG',log的最低级别。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。
COOKIES_ENABLED = False
禁用Cookies
3.1.5 Scrapy运作流程
- 引擎接收Spider需要处理的网站的URL
- 引擎将request请求交给调度器处理,调度器处理完成后将request交给引擎
- 引擎将reque请求交给下载器下载,下载器按照下载中间件的设置将下载好的请求发送给引擎(如果下载失败,引擎告诉下载器记录一下,过一定时间重新下载)。
- 引擎将下载好的东西交给Spider,Spider将数据处理完成之后,如果有需要跟进的URL会继续交给引擎按以上步骤处理。并且将获取得到的item数据交给引擎。
- 引擎将Spider处理得到的item交给管道进行处理,将得到的需要跟进的URL交给调度器接着处理。然后接着循环。
3.1.6 制作Scrapy爬虫步骤
新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
设置目标 (编写items.py):明确需要抓取的目标
制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
存储内容 (pipelines.py):设计管道存储爬取内容
3.2 实验流程
3.2.1 新建项目
创建一个爬虫项目,命令为 Scrapy startproject xxxx名称
可以在目录 C:User\zrh\myProject中看到项目的文件结构如下所示
- scrapy.cfg :项目的配置文件
- myProject/ :项目的Python模块,将会从这里引用代码
- myProject/items.py :项目的目标文件
- myProject/pipelines.py :项目的管道文件
- myProject/settings.py :项目的设置文件
- myProject/spiders/ :存储爬虫代码目录
3.2.2 设置目标
首先打开网站http://cs.hitsz.edu.cn/szll/qzjs.htm,查看我们最终需要爬取的目标应该包含什么信息。
通过图片可以看到,每位教师应该包括姓名、任职、电话、传真、Email、研究方向六个属性信息。而根据上面的scrapy框架的运作流程机制可知,最终的提取的目标的数据字段结构是通过item来定义的,因此:
打开myProject目录下的items.py
创建1个MyprojectItem类,并且定义类型为scrapy.Field类属性来定义一个item.
3.2.3 制作爬虫
3.2.3.1 爬数据
在当前目录下输入命令,将在myProject/spider目录下创建一个名为test的爬虫,并制定爬取域的范围:
scrapy genspider test “cs.hitsz.edu.cn”
- 打开 myProject/spider目录里的test.py,默认增加了下列代码:
- class ItcastSpider(scrapy.Spider):
- name = "test"
- allowed_domains = ["cs.hitsz.edu.cn "]
- start_urls = (
- 'http:// cs.hitsz.edu.cn/',
- )
- def parse(self, response):
- Pass
- name = "" :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。
- allow_domains = [] 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。
- start_urls = () :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。
start_urls=['http://cs.hitsz.edu.cn/szll/qzjs.htm','http://cs.hitsz.edu.cn/szll/qzjs/5.htm','http://cs.hitsz.edu.cn/szll/qzjs/4.htm','http://cs.hitsz.edu.cn/szll/qzjs/3.htm','http://cs.hitsz.edu.cn/szll/qzjs/2.htm','http://cs.hitsz.edu.cn/szll/qzjs/1.htm']
- parse(self, response) :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:
- 负责解析返回的网页数据(response.body),提取结构化数据(生成item)
- 生成需要下一页的URL请求。
3.2.3.2 取数据
为了能够顺利的爬到数据,需要更改配置信息,将是否遵循robots协议字段置为false。
首先观察页面源码
通过上图可以看出六个属性的标签的xpath路径都在/html/body/div[@class='grid_2']/div[@class='container']/div[@class='list']/div[@class='right']/div[@class='rightbox']/div[@class='listbox']/div[@class='teacher-content']/ul/li下
但是具体标签的路径略有不同
我们之前在mySpider/items.py 里定义了一个MyprojectItem类。 这里引入进来,然后将我们得到的数据封装到一个MyprojectItem对象中,可以保存每个老师的属性。将提取到的老师信息直接存入到数据库中。具体实现参考代码。
3.2.3.3 保存数据
除了直接将获取的老师的信息直接写入数据库中,同时将获得的老师信息存入到文件中。
3.3 实验结果及数据库设计
因为老师的个人信息包括姓名、职称、电话、传真、邮箱、研究方向。经过分析,哈工大深圳计算机学院的老师存在姓名相同的情况,而且职称电话传真邮箱研究方向也存在为空的情况,因此数据库的设计如下所示:
最后的结果如下所示:
结果正确!
最终的结果见文件result.csv。
4. 个人心得
通过这次实验,对爬虫技术有了深刻的理解和体会,同时懂得了如何使用scrapy框架进行爬虫。另外,scrapy框架是真的好用,比用requests库爬虫方便多了。
哈工大深圳计算机学院老师信息的爬取相关推荐
- 哈工大深圳计算机学院蔡聪怀,哈工大(深圳)计算机学院第一届光熙杯篮球赛圆满落幕...
(计算机科学与技术学院宣文/金帆图/朱俊璋)2017年6月6日,随着教师联队与学生联队的比赛的结束哨声响起,哈尔滨工业大学(深圳)计算机科学与技术学院第一届"光熙杯"篮球赛至此圆满 ...
- 哈工大深圳计算机学院蔡聪怀,哈尔滨工业大学(深圳)2019年“新生杯”辩论赛决赛成功举办...
11月3日下午,哈尔滨工业大学(深圳)2019年"新生杯"辩论赛决赛在T3教学楼502教室举行,吸引了2019届本科生的积极参与.在长达两个月的赛程里,从24个参赛队伍72名选手中 ...
- 哈工大深圳计算机学院复试分数线,哈尔滨工业大学深圳研究生院复试线:2011哈尔滨工业大学深圳研究生院复试分数线...
2011哈尔滨工业大学深圳研究生院复试线已公布,考生关注的2011哈尔滨工业大学深圳研究生院研究生分数线.哈尔滨工业大学深圳研究生院研究生复试分数线具体要求如下: 一. 复试及录取工作原则 坚持对考生 ...
- 哈工大深圳计算机水平怎么样,赞!哈工大(深圳)学子在第四届“龙芯杯”全国大学生计算机系统能力培养大赛中获多个奖项...
[计算机科学与技术学院宣](李程浩/文.图)近日,第四届"龙芯杯"全国大学生计算机系统能力培养大赛颁奖典礼在南京举行,哈工大(深圳)计算机科学与技术学院学子获得大赛多个奖项.计算机 ...
- 哈工大威海计算机组成原理课程设计,哈工大威海计算机学院 计算机组成原理课件80 x86.ppt...
<哈工大威海计算机学院 计算机组成原理课件80 x86.ppt>由会员分享,可在线阅读,更多相关<哈工大威海计算机学院 计算机组成原理课件80 x86.ppt(21页珍藏版)> ...
- 2023年中国科学技术大学/计算机学院电子信息专硕上岸经验
跨考的动力主要是对原专业不感兴趣,不想再继续浪费时间,加上本来对计算机兴趣浓厚,大概了解了一下跨考的难度,从去年3月底就慢慢开始学408 20年录取情况没有太大参考价值,复试线才330分好像,我们去年 ...
- 哈工大计算机学院计算机组成原理,哈工大威海计算机学院计算机组成原理.ppt...
<哈工大威海计算机学院计算机组成原理.ppt>由会员分享,可在线阅读,更多相关<哈工大威海计算机学院计算机组成原理.ppt(21页珍藏版)>请在装配图网上搜索. 1.8086/ ...
- python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...
一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...
- 爬虫入门—requests模块基础之关键字搜狗搜索信息页面爬取
爬虫入门-requests模块基础之关键字搜狗搜索信息页面爬取 Author: Labyrinthine Leo Init_time: 2021.02.16 Key Words: Spider.r ...
最新文章
- 在Mac上使用pip3安装Jupyter Notebook并简单使用
- 做外贸如何获取同行的价格体系?转至【【Mr.Harris 原创】
- c语言中数组名可以与其他变量名相同,C语言初学者入门讲座 第九讲 数组(1)...
- 【Python】Pandas在数据库中执行SQL语句并加载结果
- Impala:大数据丛林中敏捷迅速的黑斑羚
- 【优化算法】爬虫搜索算法(RSA)【含Matlab源码 1838期】
- x61 linux 驱动 无线网卡,联想X61无线网卡适配器驱动
- android系统的官网下载地址,Android安卓10.0系统官方正式版
- web开发中实现页面记忆的几种方式
- Tik Tok跨境:不会英语可以做TikTok吗?
- Jmeter01 -mac下的安装
- 基于大恒相机的VS工程配置
- linux临时关闭防火墙,和永久关闭防火墙
- rk3288 linux 编译,注意了!VS-RK3288Ubuntu编译环境错误小结
- C# MediaPlayer的详细用法
- mysql selecte_【mysql】MySQL eplain 完全解读
- 如何在ubuntu终端输入密码显示星号
- Android学习笔记(Android Studio)3-3(ProgressBar ProgressDialog)(加载进度条、转圈圈)UI组件之弹出组件
- MD5 SHA1 加密
- 怎样将文档生成链接或二维码