撤销网站备案表填写后,斗牛app开发公司,东莞大岭山森林公园,网站建设答辩ppt下载目录 
什么是Scrapy 
Scrapy核心组件 
Scrapy扩展组件 
组件交互流程 
安装Scrapy 
Scrapy项目目录结构说明 
创建Scrapy项目 
创建爬虫 
运行爬虫 
配置请求头 
全局配置请求头 
指定爬虫配置请求头 
配置管道pipeline 
全局配置pipeline 
方式一#xff1a;指定爬虫配置pipe…目录 
什么是Scrapy 
Scrapy核心组件 
Scrapy扩展组件 
组件交互流程 
安装Scrapy 
Scrapy项目目录结构说明 
创建Scrapy项目 
创建爬虫 
运行爬虫 
配置请求头 
全局配置请求头 
指定爬虫配置请求头 
配置管道pipeline 
全局配置pipeline 
方式一指定爬虫配置pipeline 
方式二指定爬虫配置pipeline 
数据建模 items Scrapy官网https://scrapy.org/ 
什么是Scrapy Scrapy 是一个基于 Python 的快速的高级网页抓取和网页爬取框架用于抓取网站并从其页面中提取结构化数据。它可用于多种用途从数据挖掘到监控和自动化测试。 Scrapy核心组件 1. Scrapy EngineScrapy引擎 Scrapy 引擎是整个系统的核心负责控制数据流在所有组件之间的流动。它从调度器获取请求发送给下载器处理然后将下载器返回的响应交给爬虫处理。2. Scheduler调度器 调度器负责接收引擎发来的请求并进行排序然后将这些请求发送给引擎。调度器可以处理优先级并且支持去重机制以避免重复抓取。3. Downloader下载器 下载器负责向互联网上的服务器发送请求并接收响应。Scrapy 下载器是高度异步的能够高效地处理大量请求。4. Spiders爬虫 爬虫是用户定义的类负责处理下载器返回的响应从中提取数据Item或进一步生成请求。每个爬虫定义了要抓取的域名和处理响应的逻辑。5. Item数据项 Item 是一种简单的数据容器用于存储从网页中提取的数据。Item 类似于字典但提供了额外的保护和方法。6. Item Pipeline数据管道 数据管道是一个序列化系统用于处理和存储从爬虫中提取的数据。每个管道组件负责处理数据项的一部分例如数据清洗、验证或存储。7. Downloader Middlewares下载中间件 下载中间件是介于调度器和下载器之间的钩子用于处理请求和响应。它们可以修改或扩展请求和响应的处理流程例如设置代理、修改请求头等。8. Spider Middlewares爬虫中间件 爬虫中间件是介于引擎和爬虫之间的钩子用于处理爬虫输入和输出的响应和结果。它们可以修改或扩展爬虫的处理流程例如添加额外的日志记录、处理异常等。 Scrapy扩展组件 1. Feed Exports数据导出 Scrapy 支持将抓取的数据导出为多种格式如 JSON、CSV、XML并可以配置导出的细节如字段顺序、编码等。2. Telnet ConsoleTelnet 控制台 Telnet 控制台提供了一个实时监控和调试爬虫的工具允许开发者在爬虫运行时进行交互式调试。3. Logging日志 Scrapy 内置了强大的日志系统用于记录运行时的各种信息如调试信息、错误消息等。日志系统可以配置不同的日志级别和输出格式。4. Extensions扩展 扩展模块用于增强 Scrapy 的功能例如自动重试失败的请求、监控爬虫性能等。开发者可以自定义扩展模块以满足特定需求。5. Stats Collectors统计收集器 统计收集器用于收集和记录爬虫运行时的各种统计信息如请求数量、响应时间等。统计信息可以用于优化和调试爬虫。 组件交互流程 初始请求爬虫从 start_urls 生成初始请求并通过引擎Engine发送给调度器Scheduler。请求调度调度器Scheduler将请求排序并发送给下载器Downloader。请求下载下载器Downloader向目标网站Internet发送请求并获取响应。响应处理下载器Downloader将响应发送给引擎Engine进而交给爬虫Spiders处理。数据提取爬虫Spiders从响应中提取数据项并生成新的请求如果有。数据处理提取的数据项通过数据管道Item Pipeline进行处理和存储。 安装Scrapy 
pip install scrapy Scrapy项目目录结构说明 Scrapy 项目的结构较为标准以下是一个典型的 Scrapy 项目的目录结构图示及其简要说明供方便理解。 myproject/
│
├── myproject/                 # 项目目录主目录
│   ├── __init__.py            
│   ├── items.py               # 定义 Item 类数据结构
│   ├── middlewares.py         # 自定义中间件
│   ├── pipelines.py           # Item 处理管道
│   ├── settings.py            # 项目设置文件
│   ├── spiders/               # 存放爬虫的目录
│   │   ├── __init__.py        
│   │   ├── example_spider.py  # 定义爬虫
│
├── scrapy.cfg                 # Scrapy 配置文件
│
└── README.md                  # 项目的说明文件可选创建Scrapy项目 
使用 scrapy startproject 命令来创建一个新的 Scrapy 项目。打开终端或命令行进入你想要创建项目的目录并运行以下命令 
# scrapy startproject 项目名称
scrapy startproject myproject创建爬虫 
在项目根目录中你可以使用 scrapy genspider 命令创建新的爬虫。以下命令将创建一个名为 baidu 的爬虫用于抓取 www.baidu.com 的域名 
# scrapy genspider 爬虫名称 允许爬取的域名
scrapy genspider baidu www.baidu.com完整目录结构如下 爬虫文件内容说明 解析方法解析response 
# 解析方法response爬取起始url的响应
def parse(self, response):# 解析示例with open(baidu.html, wb) as f:f.write(response.body) 运行爬虫 
运行爬虫之前需要修改 settings.py 配置文件的配置如下 使用 scrapy crawl 命令来运行你的爬虫。以下命令会启动名为 baidu 的爬虫 
# scrapy crawl 爬虫名称
scrapy crawl baidu配置请求头 全局配置请求头  在 settings.py 配置文件中配置 USER_AGENT 和 DEFAULT_REQUEST_HEADERS 参数示例如下 # Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT  Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
# Override the default request headers:
DEFAULT_REQUEST_HEADERS  {Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8,Accept-Language: zh-CN,zh;q0.9,
} 指定爬虫配置请求头  在指定爬虫文件中配置 start_requests 方法示例如下 import scrapyclass TeibaSpider(scrapy.Spider):name  teibaallowed_domains  [tieba.baidu.com]start_urls  [https://tieba.baidu.com/f?kw沙井]def start_requests(self):headers  {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36,Accept-Language: zh-CN,zh;q0.9,}for url in self.start_urls:yield scrapy.Request(url, headersheaders, callbackself.parse)def parse(self, response):pass 配置管道pipeline 全局配置pipeline  在 settings.py 配置文件中配置ITEM_PIPELINES 参数用于开启管道示例如下 # Configure item pipelines
ITEM_PIPELINES  {# myproject项目名称# pipelines项目下的pipelines.py文件# MyprojectPipelinepipelines.py文件中指定的类# 300管道优先级多个管道时数字越小优先级越高越先执行myproject.pipelines.MyprojectPipeline: 300,
} 
pipelines.py 文件内容如下 当管道开启后在我们启动爬虫时日志打印信息如下 方式一指定爬虫配置pipeline  在指定爬虫文件中配置 custom_settings 属性示例如下 import scrapyclass TeiBaSpider(scrapy.Spider):name  teibaallowed_domains  [tieba.baidu.com]start_urls  [https://tieba.baidu.com/f?kw沙井]# 指定 pipelinecustom_settings  {ITEM_PIPELINES: {myproject.pipelines.TieBaPipeline: 300,}}def parse(self, response):item  {}item[title]  a.xpath(./title).get()item[url]  https://tieba.baidu.com/  a.xpath(./href).get()# yield 的数据会返回到 TieBaPipeline 中yield itempipelines.py 文件内容如下 方式二指定爬虫配置pipeline  在 settings.py 配置文件中配置 ITEM_PIPELINES 参数配置多个示例如下 ITEM_PIPELINES  {myproject.pipelines.BaiDuPipeline: 300,myproject.pipelines.TieBaPipeline: 301,
} 
在 pipelines.py 文件中通过爬虫名称判断 
from itemadapter import ItemAdapterclass BaiDuPipeline:def open_spider(self, spider):# 初始化方法类比 def __init__(self)if spider.name  baidu:passdef process_item(self, item, spider):if spider.name  baidu:passreturn itemdef close_spider(self, spider):# 析构方法类比 def __del__(self)if spider.name  baidu:passclass TieBaPipeline:def open_spider(self, spider):if spider.name  tieba:passdef process_item(self, item, spider):if spider.name  tieba:passreturn itemdef close_spider(self, spider):if spider.name  tieba:pass数据建模 items 数据建模的好处是统一数据字段免得写错会在执行的时候对模板字段进行检测。清晰代码便于维护等好处。 1. 创建模型 
在 items.py 文件中创建模型 
import scrapyclass UserItem(scrapy.Item):# define the fields for your item here like:# 用户名称name  scrapy.Field()# 用户年龄age  scrapy.Field() 
2. 爬虫中使用模型 
import scrapy
from myproject.items import UserItemclass BaiduSpider(scrapy.Spider):name  baiduallowed_domains  [www.baidu.com]start_urls  [https://www.baidu.com]def parse(self, response):# 使用模型item  UserItem()item[name]  response.xpath(//h1/text()).get()item[age]  response.xpath(//h2/text()).get()yield item 
3. 管道中使用模型 
from itemadapter import ItemAdapterclass MyprojectPipeline:def process_item(self, item, spider):# 把对象类型转换成字典类型item  dict(item)return item