2019-06-15 Scrapy

Scrapy 框架

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。

异步:调用在发出之后,这个调用就直接返回,不管有无结果

非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。


流程图

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):可以自定义扩展下载功能的组件(代理、cokies等)。

Spider Middlewares(Spider中间件):可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)。

各文件作用

spiders:爬虫文件,提取数据和URL

items.py:定义要获取的目标

middleware.py:爬虫中间件和下载中间件

pipelines.py:管道文件

settings.py:设置文件,配置信息

scrapy.cfg:配置文件

yield: 的就是一个生成器带有yeild的函数遇到yeild的时候就返回一个迭代值,下次迭代时,代码从 yield 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

创建爬虫项目

scrapy startproject 项目名

新建爬虫文件

scrapy genspider 项目名 项目的域

数据持久化

存入MySQL数据库或MongoDB数据库,做数据持久化处理

pipelines.py文件中,进行数据的清洗和持久化,并在settings.py文件中激活管道

Request相关参数介绍

url: 就是需要请求,并进行下一步处理的url

callback: 指定该请求返回的Response

headers: 请求头

cookies: cookies,模拟用户登录需要指定用户的cookies,字典dict型

meta: 比较常用,在不同的请求之间传递数据使用的。字典dict型

Response相关参数介绍

status: 响应码

url:响应url

self.request(request对象)

self.headers(响应头)

创建爬虫文件

scrapy genspider -t crawl 爬虫文件 域名

rules中包含一个或多个Rule对象,如果多个rule匹配了相同的链接,第一个会被使用。

参数

link_extractor:是一个Link Extractor对象,用于定义需要提取的链接。

callback: 回调函数

follow:是否跟进,follow 默认设置为True

process_links:指定spider中哪个的函数将会被调用,该方法主要用来过滤。

process_request:指定处理函数,根据该Rule提取到的每个Request时,该函数将会被调用,可以对Request进行处理,该函数必须返回Request或者None

通常防止爬虫被反:

动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息)

禁用Cookies(前提是爬取的网站不需要cookies参数)

使用cookies池

自定义中间件

设置延迟下载(降低访问网站的频率)

使用IP代理地址池

爬虫的持久化

scrapy crawl 爬虫名称 -s JOBDIR=crawls/爬虫名称

注意Cookies 的有效期,请求序列化

Settings.py 设置文件参数

爬虫的文件路径

SPIDER_MODULES = ['ziruproject.spiders']

NEWSPIDER_MODULE = 'ziruproject.spiders'

用户代理,一般设置这个参数用来伪装浏览器请求

USER_AGENT = ''

是否遵守ROBOT协议,为False时,表示不遵守默认为True

ROBOTSTXT_OBEY = True

Scrapy downloader(下载器) 处理的最大的并发请求数量,默认: 16

CONCURRENT_REQUESTS

下载延迟的秒数,用来限制访问的频率,默认为:0

DOWNLOAD_DELAY

每个域名下能够被执行的最大的并发请求数据量,默认为:8

CONCURRENT_REQUESTS_PER_DOMAIN

是否要携带cookies,一般情况下,不是必须要携带cookies的请求,我们将这个参数设置为False,默认为: True

COOKIES_ENABLED

查看请求是否携带cookies,追踪cookies

True:表示追踪,False 不追踪,默认为:False 不追踪

COOKIES_DEBUG

设置默认的请求头

DEFAULT_REQUEST_HEADERS

爬虫中间件

SPIDER_MIDDLEWARES

下载中间件

DOWNLOADER_MIDDLEWARES

我们可以在这个参数下自定义扩展

EXTENSIONS

设置并激活管道文件,为了存储数据使用,后面的数字表示优先级,数字越小,优先级越高

ITEM_PIPELINES

下载器超时时间(单位: 秒)默认: 180

DOWNLOAD_TIMEOUT

自动限速(AutoThrottle)扩展

该扩展能根据Scrapy服务器及您爬取的网站的负载自动限制爬取速度。

数据缓存:

目的:用来将已经发送的请求缓存下来,一遍后续使用

是否启用缓存策略

HTTPCACHE_ENABLED = True

缓存超时时间

HTTPCACHE_EXPIRATION_SECS = 0

缓存保存路径

 HTTPCACHE_DIR = 'httpcache'

缓存忽略的Http状态码

HTTPCACHE_IGNORE_HTTP_CODES = []

缓存存储的插件

HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

关于日志信息的设置

LOG_ENABLED        默认: True

是否启用logging。

LOG_ENCODING

log的最低级别。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。

- CRITICAL - 严重错误(critical)

- ERROR - 一般错误(regular errors)

- WARNING - 警告信息(warning messages)

- INFO - 一般信息(informational messages)

- DEBUG - 调试信息(debugging messages)

LOG_FILE

默认: None

logging输出的文件名。如果为None,则使用标准错误输出(standard error)。

Logging使用

Scrapy提供了log功能,可以通过 logging 模块使用。

可以修改配置文件settings.py

LOG_FILE = "TencentSpider.log"

LOG_LEVEL = "INFO"

你可能感兴趣的:(2019-06-15 Scrapy)