对象存储

python网络爬虫——scrapy框架持久化存储

你说的曾经没有我的故事 提交于 2019-11-30 09:46:46
1.基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作。 执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行存储 scrapy crawl 爬虫名称 -o xxx.json scrapy crawl 爬虫名称 -o xxx.xml scrapy crawl 爬虫名称 -o xxx.csv 2.基于管道的持久化存储 scrapy框架中已经为我们专门集成好了高效、便捷的持久化操作功能,我们直接使用即可。要想使用scrapy的持久化操作功能,我们首先来认识如下两个文件: items.py:数据结构模板文件。定义数据属性。 pipelines.py:管道文件。接收数据(items),进行持久化操作。 持久化流程: 1.爬虫文件爬取到数据后,需要将数据封装到items对象中。 2.使用yield关键字将items对象提交给pipelines管道进行持久化操作。 3.在管道文件中的process_item方法中接收爬虫文件提交过来的item对象,然后编写持久化存储的代码将item对象中存储的数据进行持久化存储 4.settings.py配置文件中开启管道 - 将糗事百科首页中的段子和作者数据爬取下来,然后进行持久化存储 - 爬虫文件:qiubaiDemo.py #

Android数据存储

为君一笑 提交于 2019-11-30 09:30:31
一、Android的数据存取技术分类 本地数据存取技术: 1.SharedPreferences存储 2.文件存储 3.SQLite轻量型数据库 远程数据存取技术: 1.ContentProvider 2.网络存储 二、本地数据存取的位置: 三、SharedPreferences存储: SharedPreferences是一种轻量级的数据存储方式,可以将键/值对的数据,保存在Android的文件系统中,完全屏蔽了文件系统的操作过程。SharedPreferences支持整型、布尔型、浮点型、长整形、字符串数据类型,特别适合用于保存少量数据,更新不频繁且安全性要求不高的场合,如:软件配置参数。 1.操作前,须获取SharedPreferences对象 1.1. Context.getSharedPreferences(String name, int mode): name为文件名称。 mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE 和MODE_WORLD_WRITEABLE。 1.2. Activity.getPreferences(int mode):只能在当前activity使用,一般不用: 使用当前不带包名的类名作为文件的名称。 mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE

番外篇01____JVM篇01

偶尔善良 提交于 2019-11-30 07:48:01
JVM篇_01 犹豫了好久,没想好休息日更数据结构还是算法还是JVM。想了半天,还是更新JVM吧,毕竟现在的项目架构对于JVM调优还是有需要的,并且面试的时候靠这个能稍微吹一吹(当然了,真让我深入也深入不进去,我太菜) 明确几个小概念 JVM中,数据类型分两类: 基本类型:8种 引用类型:类、接口、数组 堆和栈: stack和heap的概念真的要说吐了,,, 简要概括吧,stack是运行时的单位,heap是存储的单位;就是说一个线程有一个线程栈,但是大家的对象都是一起“扔”到heap里的。 要说就说点和别人不一样的。我打算说说 为什么要把stack和heap区别开 1、从设计的角度来说,stack的工作是逻辑处理,heap是存储数据,分工明确,该干什么就干什么 2、按照这种方式分开后,数据就可以实现共享的目的,可以被stack1和stack2都拿到,好处多多 3、学过string和stringbuffer吧?动态增长是有好处的,不再赘述。这里stack专门用来存地址,而heap存储对象数据,其实这里是允许动态增长的。stack只需要指向它就可以了 4、遵守面向对象的思想。为什么这么说?heap像不像属性。。stack像不像方法。。我指的是根据已有的调用关系 还记得第一节课学到的main方法吗?main就是stack的起始点,甚至可能创造出更多的线程。 在stack中

Scrapy框架的基本组成及功能使用

本秂侑毒 提交于 2019-11-30 06:17:20
1.什么是scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。框架的本质就是集成各种功能、具有很强通用性的项目模板。 2.安装    Linux: pip3 install scrapy   Windows:===》见Twisted安装 a. pip3 install wheel b. 下载twisted http: / / www.lfd.uci.edu / ~gohlke / pythonlibs / #twisted c. 进入下载目录,执行 pip3 install Twisted‑ 17.1 . 0 ‑cp35‑cp35m‑win_amd64.whl d. pip3 install pywin32 e. pip3 install scrapy 3.基础使用===》相关命令都是在命令行执行   3.1.创建项目:scrapy startproject 项目名称   3.2.创建爬虫应用程序:       cd project_name(进入项目目录)       scrapy genspider 应用名称 爬取网页的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)       在步骤2执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件   3.3

秋招开始了,读《深入理解JVM虚拟机》总结

回眸只為那壹抹淺笑 提交于 2019-11-30 05:47:38
重读 JVM 秋招开始了,前面由于做别的事耽误了半个月,以前学的东西不用就很容易忘记。所以,这次重新阅读《深入理解 JVM 虚拟机》时,想做一个记录。将碎片的知识整合,方便自己以后阅读,同时也和大家一起分享。内容中会添加我自己的理解,其中如果有错误,欢迎大家指正。 1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成 如果线程正在执行一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器的值则为 (Undefined)。此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。 1.1.2 Java 虚拟机栈 线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储 局部变量表 、 操作数栈 、 动态链接 、 方法出口 等信息。每一个方法从调用直至执行结束

JavaScript 语法和数据类型

喜夏-厌秋 提交于 2019-11-30 05:44:13
JavaScript 变量 概述 把一个具体的值存入到变量中。那么此时这个变量就代表着我们这个具体的值。我们如果想要重新的使用这个值,不再需要重新的计算或者其他操作,直接使用变量就可以得到之前存储的这个值。 简单的说,变量就是一个保存数据的容器, 调用变量就是调用保存在这个容器中的值。 变量之所以叫做变量,是因为变量随时可以根据我们的需要去改变其中存储的值 注: 变量本身没有数据类型,只能根据存储的值来判断数据类型。 创建一个变量 声明关键字,如:var、let var 声明一个变量,可选初始化一个值。 let 声明一个块作用域的局部变量,可选初始化一个值。 声明变量的三种方式: 使用关键词 var var a = 42; // 可以用来声明局部变量和全局变量。    直接赋值(不推荐) b = 42;// JS 的小 bug,这样写会产生一个全局变量    这种方式在严格模式下会出错,也没人会用这种方式声明变量, 不建议使用这种方式。    使用关键词 let let c = 12; // 用来声明块作用域的局部变量。 声明变量的底层原理 我们所写的程序运行在内存中,当我们使用关键字声明一个变量的时候,计算机会从内存中划分一个空间,为我们存放不同类型的内容做准备 变量的命名规则 1. 由数字、字母、下划线( _ )、$ 组成。 不能由数字开头     不能包含星号 ( * )  

Java ee 从入门到放弃 day09

别等时光非礼了梦想. 提交于 2019-11-30 05:17:27
ArrayList集合 ArrayList构造、添加和常用方法 import java . util . ArrayList ; /* ArrayList:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList构造方法: public ArrayList():创建一个空的集合对象 ArrayList添加方法: public boolean add<E e>:将指定的元素追加到此集合的末尾 public void add(int index,E element):在此集合中的指定位置插入指定的元素 ArrayList常用方法: public boolean remove(Object o):删除指定的元素,返回删除是否成功 public boolean remove(int index):删除指定索引处的元素,返回被删除的元素 public E set(int index.E element):修改指定索引出的元素,返回被修改的元素 public E get(int index):返回指定索引处的元素 public int size():返回集合中的元素的个数 */ public class ArrayListDemo { public static void main ( String [ ] args ) { ArrayList < String >

HashSet和HashMap

試著忘記壹切 提交于 2019-11-30 03:29:53
HashMap 概念和特征   概念 :以键值对的形式存储数据,由键映射到值,核心在于Key上。   特征 :键不能重复,值可以重复; key-value允许为null 。     HashMap   SinceJDK1.2   前身是HashTable(SinceJDK1.0)     HashMap   实现了Map接口   HashMap底层是一个 Entry 数组,当发生 hash冲突(碰撞) 的时候,HashMap是采用 链表 的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。   Key不能重复,判断是否重复的标准是: hashCode()和equals()方法 , 如果hashCode相同并且equals相等就是一个重复的key。   注意 :放入HashMap集合中的Key必须要覆盖Object类型的 hashCode()和equals()方法 ,否则就会出现重复的Key。 put()和get()方法   put(K,V) :将键值对存储到HashMap中(放入)   get(K) :根据Key获取Value,如果Key在HashMap中不存在返回null。   场景:创建HashMap对象,将元素放入HashMap,根据Key获取Value。 import java.util.HashMap; import java

前端复习之HTML5

送分小仙女□ 提交于 2019-11-30 03:24:53
HTML5 Day01: *概念: *HTML5之后,声明不在出现版本信息 *HTML5永远不可能离开JavaScript。 *HTML5在移动端支持好于PC端 * HTML新表单: *input新类型: 1 *email类型 - 验证是否包含“@” 2 *url类型 - 验证是否包含"http://" 3 *tel类型 - 只在移动端显示 4 *number类型 5 *range类型 6 *date类型 7 *color类型 *表单新元素: 1 *datalist元素 - 类似于select元素 2 *datalist元素 - 预定义数据内容(option) 3 *使用<input>元素的list属性 4 *prograss元素 - 进度条 5 *max - 设置最大值 6 *value - 设置当前进度 7 *meter元素 - 刻度 8 *min、max - 最小最大值 9 *value - 设置当前值 10 *low - 设置低预警 11 *output元素 *表单新属性: 1 *placeholder - 提供默认提示内容 2 *multiple - 允许输入多个值,多个值之间使用"," 3 *autofocus - 自动获取焦点 4 *form - 允许表单元素定义在表单之外 *表单新验证 *验证属性: 1 *required属性 2 *验证当前元素值是否为空 3

浅谈PHP反序列化漏洞原理

梦想与她 提交于 2019-11-30 03:02:23
序列化与反序列化 序列化用途:方便于对象在网络中的传输和存储 0x01 php反序列化漏洞 在PHP应用中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。 常见的序列化格式: 二进制格式 字节数组 json字符串 xml字符串 序列化就是将对象转换为流,利于储存和传输的格式 反序列化与序列化相反,将流转换为对象 例如:json序列化、XML序列化、二进制序列化、SOAP序列化 而php的序列化和反序列化基本都围绕着 serialize() , unserialize() 这两个函数 php对象中常见的魔术方法 __construct() // 当一个对象创建时被调用, __destruct() // 当一个对象销毁时被调用, __toString() // 当一个对象被当作一个字符串被调用。 __wakeup() // 使用unserialize()会检查是否存在__wakeup()方法,如果存在则会先调用,预先准备对象需要的资源 __sleep() // 使用serialize()会检查是否存在__wakeup()方法,如果存在则会先调用,预先准备对象需要的资源 __destruct() // 对象被销毁时触发 __call() // 在对象上下文中调用不可访问的方法时触发 __callStatic() // 在静态上下文中调用不可访问的方法时触发 _