共计 2662 个字符,预计需要花费 7 分钟才能阅读完成。
【百度云搜索,搜各种资料:http://bdy.lqkweb.com】
【搜网盘,搜各种资料:http://www.swpan.cn】
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架。其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取 (更确切来说, 网络抓取)所设计的,也可以应用在获取 API 所返回的数据(例如 Amazon Associates Web Services) 或者通用的网络爬虫。Scrapy 用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy 使用了 Twisted 异步网络库来处理网络通讯。整体架构大致如下
Scrapy 主要包括了以下组件:
-
引擎 (Scrapy)
用来处理整个系统的数据流处理, 触发事务(框架核心) -
调度器 (Scheduler)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个 URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 -
下载器 (Downloader)
用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy 下载器是建立在 twisted 这个高效的异步模型上的) -
爬虫 (Spiders)
爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接, 让 Scrapy 继续抓取下一个页面 -
项目管道 (Pipeline)
负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。 -
下载器中间件 (Downloader Middlewares)
位于 Scrapy 引擎和下载器之间的框架,主要是处理 Scrapy 引擎与下载器之间的请求及响应。 -
爬虫中间件 (Spider Middlewares)
介于 Scrapy 引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。 -
调度中间件 (Scheduler Middewares)
介于 Scrapy 引擎和调度之间的中间件,从 Scrapy 引擎发送到调度的请求和响应。
Scrapy 运行流程大概如下:
- 引擎从调度器中取出一个链接 (URL) 用于接下来的抓取
- 引擎把 URL 封装成一个请求 (Request) 传给下载器
- 下载器把资源下载下来,并封装成应答包(Response)
- 爬虫解析 Response
- 解析出实体(Item), 则交给实体管道进行进一步的处理
- 解析出的是链接(URL), 则把 URL 交给调度器等待抓取
创建 Scrapy 框架项目
Scrapy 框架项目是有 python 安装目录里的 Scripts 文件夹里 scrapy.exe 文件创建的,所以 python 安装目录下的Scripts 文件夹要配置到系统环境变量里,才能运行命令生成项目
创建项目
首先运行 cmd 终端,然后 cd 进入要创建项目的目录,如:cd H:py14
进入要创建项目的目录后执行命令 scrapy startproject 项目名称
scrapy startproject pach1
项目创建成功
项目说明
目录结构如下:
├── firstCrawler
│ ├── __init__.py
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ └── __init__.py
└── scrapy.cfg
-
scrapy.cfg
: 项目的配置文件 -
tems.py
: 项目中的 item 文件,用来定义解析对象对应的属性或字段。 -
pipelines.py
: 负责处理被 spider 提取出来的 item。典型的处理有清理、验证及持久化(例如存取到数据库)[](http://lib.csdn.net/base/mysql “MySQL 知识库 ”) -
settings.py
: 项目的设置文件. - spiders:实现自定义爬虫的目录
- middlewares.py:Spider 中间件是在引擎及 Spider 之间的特定钩子 (specific hook),处理 spider 的输入(response) 和输出(items 及 requests)。其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 功能。
创建第一个爬虫
创建爬虫文件在 spiders 文件夹里创建
1、创建一个类必须继承 scrapy.Spider 类,类名称自定义
类里的属性和方法:
name 属性,设置爬虫名称
allowed_domains 属性,设置爬取的域名,不带 http
start_urls 属性,设置爬取的 URL,带 http
parse() 方法,爬取页面后的回调方法,response 参数是一个对象,封装了所有的爬取信息
response 对象的方法和属性
response.url 获取抓取的 rul
response.body 获取网页内容字节类型
response.body_as_unicode() 获取网站内容字符串类型
# -*- coding: utf-8 -*-
import scrapy
class AdcSpider(scrapy.Spider):
name = 'adc' #设置爬虫名称
allowed_domains = ['www.shaimn.com']
start_urls = ['http://www.shaimn.com/xinggan/']
def parse(self, response):
current_url = response.url #获取抓取的 rul
body = response.body #获取网页内容字节类型
unicode_body = response.body_as_unicode() #获取网站内容字符串类型
print(unicode_body)
爬虫写好后执行爬虫,cd 到爬虫目录里执行 scrapy crawl adc –nolog 命令,说明:scrapy crawl adc(adc 表示 爬虫名称) –nolog(–nolog 表示不显示日志)**
也可以在 PyCharm 执行命令
【转载自:http://www.leiqiankun.com/?id=46】