- 实验目的
- 实验原理
- 实验环境
- 实验内容
- 实验步骤
- 1.下载安装包Scrapy
- 2.测试Scrapy是否安装成功,切换/apps目录下,创建一个工程,名为Spider。
- 3.将新建好的Spider项目导入Pycharm。
- 4.我们要爬取伯乐在线的二级域名,因此我们使用Scrapy命令来创建模板,注意此处应进入到Spider目录下。
- 5.在Pycharm中,右键单击spiders,选择Synchronize ‘spiders’刷新一下。
- 6.由于Pycharm中没有Scrapy模板,因此我们只能自己创建一个main文件来进行调试。
- 7.main文件中的内容为:
- 8.在执行程序之前我们还需修改settings.py中的ROBOTSTXT_OBEY参数,将TRUE改为False。如果不进行设置的话,Scrapy默认会去读取robots协议,将不满足robots协议的url过滤掉,那样将会使我们爬取的数据不完整。
- 9.以上步骤都做好后,就可以在jobbole.py文件中编写具体的爬虫规则了。最后在main文件中,右键执行Run ‘main’就可以启动Scrapy来执行程序了。
实验目的
1.了解爬虫Scrapy框架
2.掌握Scrapy框架的安装方法
实验原理
Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy吸引人的地方在于它是一个框架,任何人都F可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
所谓网络爬虫就是,抓取特定网站网页的HTML数据。抓取网页的一般方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样。
Scrapy 使用 Twisted这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。
1.Scrapy整体架构
1.引擎(Scrapy Engine),用来处理整个系统的数据流处理,触发事务。
2.调度器(Scheduler),用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。
3.下载器(Downloader),用于下载网页内容,并将网页内容返回给蜘蛛。
4.蜘蛛(Spiders),蜘蛛是主要干活的,用它来制订特定域名或网页的解析规则。编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站
5.项目管道(Item Pipeline),负责处理有蜘蛛从网页中抽取的项目,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
6.下载器中间件(Downloader Middlewares),位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
7.蜘蛛中间件(Spider Middlewares),介于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。
8.调度中间件(Scheduler Middlewares),介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。
2. 爬取流程
首先从初始URL开始,Scheduler会将其交给Downloader进行下载,下载之后会交给Spider进行分析,Spider分析出来的结果有两种:一种是需要进一步抓取的链接,抓取到的东西会被传回Scheduler;另一种是需要保存的数据,它们被送到Item Pipeline那里,那是对数据进行后期处理(详细分析、过滤、存储等)的地方。另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。
实验环境
Linux Ubuntu 16.04
Python 3.6.0
PyCharm
实验内容
了解并搭建Scrapy爬虫框架。创建Spider项目,了解项目执行流程。
实验步骤
1.下载安装包Scrapy
mkdir -p /data/scrapy
cd /data/scrapy
sudo wget http://192.168.1.100:60000/allfiles/scrapy/Scrapy-1.6.0-py2.py3-none-any.whl
用pip命令安装Scrapy框架
pip install Scrapy-1.6.0-py2.py3-none-any.whl
2.测试Scrapy是否安装成功,切换/apps目录下,创建一个工程,名为Spider。
cd /apps
scrapy startproject Spider
Scrapy框架至此就安装成功了,下面我们来学习一下,Scrapy在Pycharm中的用法。
3.将新建好的Spider项目导入Pycharm。
双击Pycharm,点击Open,选择/apps目录下的Spider后点击OK。
Scrapy为我们提供了一条scrapy genspider example example.com命令,其中example我们可以替换为Spider名称,example.com我们可以替换为要爬取的网站域名。
4.我们要爬取伯乐在线的二级域名,因此我们使用Scrapy命令来创建模板,注意此处应进入到Spider目录下。
cd /apps/Spider
scrapy genspider jobbole blog.jobbole.com
5.在Pycharm中,右键单击spiders,选择Synchronize ‘spiders’刷新一下。
可以看到Spider项目中多了一个jobbole.py文件。
6.由于Pycharm中没有Scrapy模板,因此我们只能自己创建一个main文件来进行调试。
右键单击Spider,选择新建文件Python File,命名为main。
7.main文件中的内容为:
# -*- coding: utf-8 -*-
from scrapy.cmdline import execute
import sys
import os
#print(os.path.dirname(os.path.abspath(__file__)))
#获取目录,使命令能够正常执行
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
#执行命令,等同于scrapy crawl jobbole命令
execute(["scrapy","crawl","jobbole"])
其中,调用from scrapy.cmdline包下的execute函数,就可以执行Scrapy脚本。
其中,
sys.path.append(os.path.dirname(os.path.abspath(file)))的意思是指定项目目录,只有指定了项目目录,命令才能生效。
其中,execute([“scrapy”,”crawl”,”jobbole”])的意思是,执行scrapy crawl jobbole命令。