失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python scrapy框架爬虫_Python Scrapy爬虫框架

python scrapy框架爬虫_Python Scrapy爬虫框架

时间:2018-10-05 00:09:08

相关推荐

python scrapy框架爬虫_Python Scrapy爬虫框架

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爬虫框架》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。