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)


创建爬虫项目

scrapy startproject 项目名

新建爬虫文件

scrapy genspider 项目名 项目的域


创建成功后会生成很多文件,items.py文件中用来定义要爬取的字段,所有的配置在settings.py文件中设置,在项目名.py文件中编写代码

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


数据持久化

存入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(响应头)


CrawlSpider它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则Rule来爬取页面

创建爬虫文件

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

注意:

当编写爬虫规则时,不能使用parse作为回调函数。如果覆盖了 parse方法,crawl spider将会运行失败。


通常防止爬虫被反:

动态设置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"

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本主题主要是scrapy入门,包含内容如下:  1. Scrapy框架环境搭建;  2. 理解scrapy框架结...
    杨强AT南京阅读 1,398评论 0 10
  • scrapy框架Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广...
    糖炒栗子_01c5阅读 2,921评论 0 2
  • 说起写爬虫,大多数第一时间想到的就是python了。python语法简洁明了,加上及其丰富好用的库,用它来写爬虫有...
    疯狂的哈丘阅读 8,221评论 1 15
  • 这部剧比现在的气温还要热。 电视剧没怎们看,还好看过小说,大概也知道演什么。这么多年,亦舒放出的影视改编权很少,所...
    赵玥昕阅读 467评论 0 0
  • 和同事一起吃饭。她是个喜欢穿粉色衣服的北方姑娘,性格开朗。生活也过得很精致,现在她唯一的遗憾,就是还是单身,大概有...
    diy1947阅读 216评论 0 1