目录

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.实验目标概述

本次作业要求学习、理解爬虫技术并进行简单地应用。

  1. 利用爬虫爬取学院官网老师的简历信息, 可以使用例如scrapy的爬虫框架 (http://cs.hitsz.edu.cn/szll/qzjs.htm);
  2. 将爬取的信息进行清理(也可以在爬取的时候就定义好匹配规则), 然后将爬取的数据存入一个合理设计表项的数据库,对应简历中的各项信息:例如姓名、任职、电话等等;
  3. 完成实验报告,介绍爬虫的基本原理以及使用的基本方法、实验流程和实验心得等。

2.实验环境配置

Win10 + Scrapy 2.4.1 + python3.6.6 + MySQLdb

3.实验过程

3.1Scrapy框架的使用介绍

  1. Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。
  2. 用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常方便。
  3. Scrapy 使用了 Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

3.1.1Scrapy架构图

  1. Scrapy Engine(引擎): 负责SpiderItemPipelineDownloaderScheduler中间的通讯,信号、数据传递等。
  2. Schduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
  3. Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
  4. Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
  5. Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
  6. Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
  7. 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的一些典型应用:

  1. 验证爬取的数据(检查item包含某些字段,比如说name字段)
  2. 查重(并丢弃)
  3. 将爬取结果保存到文件或者数据库中(本次实验将结果保存到文件中,代码见后续分析)

为了启用Item Pipeline组件,必须将它的类添加到 settings.py文件ITEM_PIPELINES 配置。本次实验的配置如下所示

分配给每个类的整型值,确定了他们运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内(0-1000随意设置,数值越低,组件的优先级越高

3.1.3Spider

Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。

class scrapy.Spider是最基本的类,所有编写的爬虫必须继承这个类。

主要用到的函数及调用顺序为:

  1. __init__(): 初始化爬虫名字和start_urls列表
  2. start_requests() :调用make_requests_from url():生成Requests对象交给Scrapy下载并返回response
  3. parse(): 解析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运作流程

  1. 引擎接收Spider需要处理的网站的URL
  2. 引擎将request请求交给调度器处理,调度器处理完成后将request交给引擎
  3. 引擎将reque请求交给下载器下载,下载器按照下载中间件的设置将下载好的请求发送给引擎(如果下载失败,引擎告诉下载器记录一下,过一定时间重新下载)。
  4. 引擎将下载好的东西交给Spider,Spider将数据处理完成之后,如果有需要跟进的URL会继续交给引擎按以上步骤处理。并且将获取得到的item数据交给引擎。
  5. 引擎将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库爬虫方便多了。

哈工大深圳计算机学院老师信息的爬取相关推荐

  1. 哈工大深圳计算机学院蔡聪怀,哈工大(深圳)计算机学院第一届光熙杯篮球赛圆满落幕...

    (计算机科学与技术学院宣文/金帆图/朱俊璋)2017年6月6日,随着教师联队与学生联队的比赛的结束哨声响起,哈尔滨工业大学(深圳)计算机科学与技术学院第一届"光熙杯"篮球赛至此圆满 ...

  2. 哈工大深圳计算机学院蔡聪怀,哈尔滨工业大学(深圳)2019年“新生杯”辩论赛决赛成功举办...

    11月3日下午,哈尔滨工业大学(深圳)2019年"新生杯"辩论赛决赛在T3教学楼502教室举行,吸引了2019届本科生的积极参与.在长达两个月的赛程里,从24个参赛队伍72名选手中 ...

  3. 哈工大深圳计算机学院复试分数线,哈尔滨工业大学深圳研究生院复试线:2011哈尔滨工业大学深圳研究生院复试分数线...

    2011哈尔滨工业大学深圳研究生院复试线已公布,考生关注的2011哈尔滨工业大学深圳研究生院研究生分数线.哈尔滨工业大学深圳研究生院研究生复试分数线具体要求如下: 一. 复试及录取工作原则 坚持对考生 ...

  4. 哈工大深圳计算机水平怎么样,赞!哈工大(深圳)学子在第四届“龙芯杯”全国大学生计算机系统能力培养大赛中获多个奖项...

    [计算机科学与技术学院宣](李程浩/文.图)近日,第四届"龙芯杯"全国大学生计算机系统能力培养大赛颁奖典礼在南京举行,哈工大(深圳)计算机科学与技术学院学子获得大赛多个奖项.计算机 ...

  5. 哈工大威海计算机组成原理课程设计,哈工大威海计算机学院 计算机组成原理课件80 x86.ppt...

    <哈工大威海计算机学院 计算机组成原理课件80 x86.ppt>由会员分享,可在线阅读,更多相关<哈工大威海计算机学院 计算机组成原理课件80 x86.ppt(21页珍藏版)> ...

  6. 2023年中国科学技术大学/计算机学院电子信息专硕上岸经验

    跨考的动力主要是对原专业不感兴趣,不想再继续浪费时间,加上本来对计算机兴趣浓厚,大概了解了一下跨考的难度,从去年3月底就慢慢开始学408 20年录取情况没有太大参考价值,复试线才330分好像,我们去年 ...

  7. 哈工大计算机学院计算机组成原理,哈工大威海计算机学院计算机组成原理.ppt...

    <哈工大威海计算机学院计算机组成原理.ppt>由会员分享,可在线阅读,更多相关<哈工大威海计算机学院计算机组成原理.ppt(21页珍藏版)>请在装配图网上搜索. 1.8086/ ...

  8. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  9. 爬虫入门—requests模块基础之关键字搜狗搜索信息页面爬取

    爬虫入门-requests模块基础之关键字搜狗搜索信息页面爬取 Author: Labyrinthine Leo   Init_time: 2021.02.16 Key Words: Spider.r ...

最新文章

  1. 在Mac上使用pip3安装Jupyter Notebook并简单使用
  2. 做外贸如何获取同行的价格体系?转至【【Mr.Harris 原创】
  3. c语言中数组名可以与其他变量名相同,C语言初学者入门讲座 第九讲 数组(1)...
  4. 【Python】Pandas在数据库中执行SQL语句并加载结果
  5. Impala:大数据丛林中敏捷迅速的黑斑羚
  6. 【优化算法】爬虫搜索算法(RSA)【含Matlab源码 1838期】
  7. x61 linux 驱动 无线网卡,联想X61无线网卡适配器驱动
  8. android系统的官网下载地址,Android安卓10.0系统官方正式版
  9. web开发中实现页面记忆的几种方式
  10. Tik Tok跨境:不会英语可以做TikTok吗?
  11. Jmeter01 -mac下的安装
  12. 基于大恒相机的VS工程配置
  13. linux临时关闭防火墙,和永久关闭防火墙
  14. rk3288 linux 编译,注意了!VS-RK3288Ubuntu编译环境错误小结
  15. C# MediaPlayer的详细用法
  16. mysql selecte_【mysql】MySQL eplain 完全解读
  17. 如何在ubuntu终端输入密码显示星号
  18. Android学习笔记(Android Studio)3-3(ProgressBar ProgressDialog)(加载进度条、转圈圈)UI组件之弹出组件
  19. MD5 SHA1 加密
  20. 怎样将文档生成链接或二维码

热门文章

  1. QCC304x系列开发教程(实战篇) 之 QCC3040之RF测试
  2. 点晴免费OA系统的2017年升级记录
  3. 发布四大战略举措,亚马逊云科技看准了中国云市场的哪些新机会?
  4. oracle的sql if函数的使用方法,oracle基本sql语句和函数详解
  5. 江苏计算机一级2017年真题,2017年9月江苏计算机一级考试试题
  6. macOS 下载vmware虚拟机安装Windows10
  7. Android界面设计5--管理系统UI
  8. 切空间(TBN矩阵介绍)
  9. 高速SerDes PCB 设计
  10. linux操作系统和应用(完结)