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"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容

  • 本主题主要是scrapy入门,包含内容如下:  1. Scrapy框架环境搭建;  2. 理解scrapy框架结...
    杨强AT南京阅读 1,322评论 0 10
  • 说起写爬虫,大多数第一时间想到的就是python了。python语法简洁明了,加上及其丰富好用的库,用它来写爬虫有...
    疯狂的哈丘阅读 8,164评论 1 15
  • scrapy框架Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广...
    糖炒栗子_01c5阅读 2,889评论 0 2
  • 期待梦中相见可您 没有出现 等不及了吗望乡台上早盼把儿女瞧看 十年生死两世茫茫 一壶老酒几抔新土肝肠寸断泪流万千...
    北斗儿阅读 192评论 0 2
  • 1,碧桂园、万科、恒大,2016年创下3000亿销售规模的三巨头,2017年又齐齐闯进5000亿。 2016年千亿...
    Heart029阅读 68评论 0 0