python-scrapy框架学习笔记
- 创建工程:
- 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 为每次提取到链接调用的分析回调函数
python-scrapy框架学习笔记相关推荐
- python Scrapy 从零开始学习笔记(一)
Scrapy 官方网址: https://docs.scrapy.org/en/latest/ Scrapy 中文网址: https://scrapy-chs.readthedocs.io/zh_CN ...
- Scrapy框架学习笔记
在Pycharm中新建一个项目KwScrapySpider 2.File->setting->Python Interpreter安装scrapy 打开Terminal,执行命令: scr ...
- Scrapy框架学习笔记 - 爬取腾讯招聘网数据
文章目录 一.Scrapy框架概述 (一)网络爬虫 (二)Scrapy框架 (三)安装Scrapy框架 (四)Scrapy核心组件 (五)Scrapy工作流程 二. Scrapy案例演示 (一)爬取目 ...
- Scrapy框架学习笔记:猫眼爬虫
文章目录 一.提出任务 二.实现任务 (一)创建PyCharm项目 - MaoyanCrawler (二)创建Scrapy项目 - Maoyan (三)利用指令生成爬虫程序基本框架 (四)修改全局配置 ...
- Python Flask框架学习笔记14
数据库一对一的关系: 实现一对一的关系,只需要在一对多的基础上,将"多"的那一端设置为"一"即可. 书上举得例子是:用户拓展表. 在公司业务增长的情况下,需要存 ...
- python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...
- python白帽子学习笔记(整合)
python白帽子学习笔记(整合) 学习笔记目录 python白帽子学习笔记(整合) 前言 一.基础篇 1.正则表达式 2.列表 3.元组带上了枷锁的列表 4.奇葩的内置方法 5.格式化字符 6.序列 ...
- python标准库学习笔记
原创:python标准库学习笔记 数据结构 bisect 模块里实现了一个向列表插入元素时也会顺便排序的算法. struct - 二进制数据结构:用途:在 Python 基本数据类型和二进制数据之间进 ...
- 无敌python爬虫教程学习笔记(二)
系列文章目录 无敌python爬虫教程学习笔记(一) 无敌python爬虫教程学习笔记(二) 无敌python爬虫教程学习笔记(三) 无敌python爬虫教程学习笔记(四) 手刃一个小爬虫 系列文章目 ...
- 大数据第二阶段Python基础编程学习笔记(待完善)
大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...
最新文章
- SAP 没有激活HUM功能照常可以使用Handling Unit
- js对html进行转义和反转义的操作
- nexus-3.6.0-02-unix.tar.gz安装(Centos下),maven setting.xml配置案例,项目root的pom.xml配置,parent-pom的pom.xml配置案例
- C# 系统应用之无标题窗体移动的两种方法
- .hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总
- 趣学算法之斐波拉契数列实现
- session对象和applicatione对象
- Linux下用Java获取本机IP
- 智能优化算法:龙格-库塔优化算法 - 附代码
- 为什么家里pm25比外面高_你绝对不会相信在家用卷发棒烫发竟然比在外面烫发更伤发?...
- 天翼云盘v6.3.5绿色精简版
- As a good Java programer
- java textfield 右对齐_TextField右对齐问题javafx
- Java对象内存大小计算
- 将java项目部署到腾讯云服务器
- 基于STM32单片机的密码锁(Proteus仿真+程序+报告)
- Linux命令详解:md5sum
- Linux新加硬盘挂载
- 关于C++中公有继承、私有继承、保护继承的讨论
- 2017年迄今最新人工智能资源
热门文章
- pdfpcell输出换行_poi导出Excel(cell单元格里的一串文字,换行显示,设置字体)...
- Jquery第一章基础、过滤、层次选择器第二节1/2
- apache 版本_Apache官宣!ShardingSphere首个Apache版本发布
- Codeforce C. Bus
- Linux卸载jdk
- python征程3.1(列表,迭代,函数,dic,set,的简单应用)
- C++中常用到的容器
- javascript紧接上一张for循环的问题,我自己的理解
- 谷歌浏览器修改CSS和js后同步保存到文件中 (译)
- VC中,如何将十六进制字符串转换为十进制数?