python-scrapy框架学习笔记

  • Post author:
  • Post category:python


– 创建工程:

– scrapy startproject projectName(工程名称)

– cd 进工程文件夹

– cd projectName

– 在spiders子目录创建爬虫文件,终端命令如下:

– scrapy genspider spiderName www.xxx.com

– 其中  spiderName(爬虫文件名称)   www.xxx.com  (爬取网址)

– 就可以发现文件了

– 执行工程

– scrapy crawl spiderName   –nolog   (选项参数可选,不输出日志信息,默认输出日志信息,一般不选择这个选项)

– 若日志信息过于扰乱实现    可以在setting中添加

#显示指定类型的日志信息

– LOG_LEVEL = “ERROR”

– 持久化存储:

– 基于终端

– scrapy crawl name -o  filePath

– 该方法只能存储parse方法的返回值

– 并且有格式要求   csv xml等等

– 基于管道

– 编码流程

– 数据解析

– 在item类中定义相关属性(items.py)

– 将解析到的数据存储到item类型对象中

– 将item对象提交给管道进行持久化存储

– 在管道类的process_item中将其接收到的item对象中的数据进行持久化存储

– 在配置中开启管道

– 注:可以重写爬虫类:

–   open_spider(self,spider):

–   close_spider(slef,spider):

– 面试题:如何将数据一份存到本地,一份存到数据库

– 在管道类中多写一个管道类

– 在设置中设置新管道类的优先值

– item只会传递给优先值最高的管道类,要想传递给下一个管道类,需要加  return item语句

– 须养成每个管道类的process_item最后加上return item语句,便于后期的维护和更新

– 全站数据爬取:

– url不放在start_url中

– 每次调用parse函数最后拼接好下一个url

– 调用 yield scrapy.Request(url = new_url, callback = self.parase)即可爬取下一条数据


– 五大核心部件:分别为引擎、下载器、调度器、spider(爬虫文件)、管道

– 爬虫文件的作用:

a. 解析数据

b. 发请求

– 调度器:

a. 队列(队列是一种数据结构,拥有先进先出的特性。)

b. 过滤器(过滤器适用于过滤的,过滤重复的请求。)

调度器是用来调度请求对象的。

– 引擎:

所有的实例化的过程都是由引擎来做的,根据那到的数据流进行判断实例化的时间。

处理流数据

触发事务

– 下载器

a. 下载器拿到请求后将请求拿到互联网进行数据下载

b. 互联网将下载好的数据发送给下载器,此时下载好的数据是封装在响应对象中的

c. 下载器将响应对象发送给引擎,引擎接收到了响应对象,此时引擎中存储了从互联网中下载的数据。

– 管道

持久化存储 item

– 请求传参

– 可以在爬虫文件中另外定义解析函数作为回调函数,并且给回调函数传递参数meta = {}

– yield scrapy.Request(url = detail_url,callback = detail_url,meta = {‘item’ : item})

– 基于scrapy 框架的图片爬取和保存

– ImagePipeline类:

– 只需将图片的src解析出交给ImagePipeline类即可

– 使用流程:

– 重写管道类的ImagePipeline

– 重写三个方法

– get_media_request(self, item, info)  发送图片下载请求函数

– file_path(self, request, response=None, info=None, *, item=None )文件名称函数

– item_completed(self, result, item, info)下载完成函数,每次图片爬取完成都会调用此函数,此函数可以将item传递给下一个管道类

相关信息,请查阅网上描述

如下:

def get_media_requests(self, item, info):

yield scrapy.Request(item[‘url’])

# 制定图片名称

def file_path(self, request, response=None, info=None, *, item=None):

return str(time.time()) + “.jpg”

def item_completed(self, result, item, info):  # 传给下一个pipeline类

return item

– CrawlSpider   是基于Spider父类的子类

– 比Spider拥有更多的方法功能

– 全站数据爬取:

– 基于Spider

– 基于CrawlSpider爬取

– 创建爬虫文件

– scrapy genpsider -t crawl xxx www.xxx.com

– 链接提取器

– LinkExtrator(allow = r’Item’)

– allow 后为匹配的正则表达式,用于指定链接的提取

– Rule(LinkExtrator(allow = r’Item’), callback= ‘parse_item’,follow= False)

– callback  为每次提取到链接调用的分析回调函数