Scrapy爬虫框架结构:
数据流的3个路径:
一:
1.Engine从Spider处获得爬取请求(Request)
2.Engine将爬取请求转发给Scheduler,用于调度
二:
3.Engine从Scheduler处获得下一个要爬取的请求
4.Engine将爬取请求通过中间件发送给Downloader
5.爬取网页后,Downloader形成响应(Response),通过中间件发送给Engine
6.Engine将收到的响应通过中间件发送给Spider处理
三:
7.Spider处理响应后产生爬取项(scraped Item)和新的爬取请求(Requests)给Engine
8.Engine将爬取项发送给Item PipeLine(框架出口)
9.Engine将爬取请求发送给Scheduler
框架入口:Spider的初试爬取请求
框架出口:Item Pipeline
各个模块(5+2结构):
Engine(不需要用户修改)
(1)控制所有模块之间的数据流
(2)根据条件触发事件
Downloader(不需要用户修改)
根据请求下载网页
Scheduler(不需要用户修改)
对所有爬取请求进行调度管理
Downloader Middleware(用户可以编写配置代码)
目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制功能:修改、丢弃、新增请求或响应
Spider(需要用户编写配置代码)
(1)解析Downloader返回的响应(Response)
(2)产生爬取项(scraped item)
(3)产生额外的爬取请求(Request)
Item Pipelines
(1)以流水线方式处理Spider产生的爬取项
(2)由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
(3)可能操作包括:清理、检验和查重爬取项中的HTML数据,将数据存入数据库
Spider(用户可以编写配置代码)
目的:对请求和爬取项的再处理功能:修改、丢弃、新增请求或爬取项
Scrapy爬虫实例:
演示HTML页面地址:http://python123.io/ws/demo.html文件名称:demo.html
(1)建立一个Scrapy爬虫工程
在命令行中进入:E:\PythonProject,输入命令 scrapy startproject python123demo
建立了一个名为python123demo的工程,目录结构如下:
(2)在工程中建立一个spider爬虫
在命令行中进入:E:\PythonProject\python123demo,输入命令:scrapy genspider demo python123.io
之后生成一个名字为demo的spider,对应于Spiders文件夹下的demo.py文件
(3)打开demo.py文件,配置spider爬虫将指定网页内容存入demo.html文件中
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
#爬虫名称
name = "demo"
#爬虫的约束区域,规定爬虫只爬取这个区域下的网页
allowed_domains=["python123.io"]
#爬取的URL列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。
start_urls = ["http://python123.io/ws/demo.html"]
#爬取的URL列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。
def parse(self, response):
fname=response.url.split("/")[-1]
with open(fname,"wb") as f:
f.write(response.body)
pass
(4)运行爬虫,获取网页内容
在命令行中进入E:\PythonProject\python123demo,输入命令 scrapy crawl demo开始执行爬虫,
执行的结果被存储到html文件中
(5)优化配置,提升Scrapy爬虫的爬取速度
在settings.py文件中,有如下并发连接选项:
CONCURRENT_REQUESTS Downloader最大并发请求下载数量,默认32
CONCURRENT_ITEMSItem Pipeline最大并发ITEM处理数量,默认100
CONCURRENT_REQUESTS_PER_DOMAIN每个目标域名最大的并发请求数量,默认8
CONCURRENT_REQUESTS_PER_IP每个目标IP最大的并发请求数量,默认0,非0有效
通过改变数量,可以提升或降低爬虫爬取的速度
Scrapy爬虫数据类型
Request类(class scrapy.http.Request() )
Request对象表示一个HTTP请求
由Spider生成,由Downloader执行
属性或方法.url Request对应的请求URL地址.method对应的请求方法,"GET" "POST"等.headers字典类型风格的请求头.body请求内容主体,字符串类型.meta用户添加的扩展信息,在Scrapy内部模块间传递信息使用.copy()复制该请求
Response对象class scrapy.http.Response()
Response对象表示一个HTTP响应
由Downloader生成,由Spider处理
属性或方法.url Response对应的URL地址.status HTTP状态码,默认是200
.headers Response对应的头部信息.bodyResponse对应的内容信息,字符串类型.flags一组标记.request产生Response类型对应的Request对象.copy()复制该响应
Item对象class scrapy.item.Item()
Item对象表示一个从HTML页面中提取的信息内容
由Spider生成,由Item Pipeline处理Item类似字典类型,可以按照字典类型操作
如果觉得《python scrapy框架爬虫_Python Scrapy爬虫框架》对你有帮助,请点赞、收藏,并留下你的观点哦!