自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

perfectsorrow的博客

you are a person full of ideals

  • 博客(55)
  • 收藏
  • 关注

转载 Python 读取大文件

最近在学习python的过程中接触到了python对文件的读取。python读取文件一般情况是利用open()函数以及read()函数来完成:f = open(filename,'r')f.read()这种方法读取小文件,即读取远远大小小于内存的文件显然没有什么问题。但是如果是将一个10G大小的日志文件读取,即文件大于内存的大小,这么处理就有问题了,会造成MemoryError ... 也就是发...

2018-06-10 17:37:49 459

转载 Bytes和bits的区别

基本概念Bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范畴;Byte意为“字节”,是计算机文件大小的基本计算单位;这两者应用的场合不同。通常用bit来作数据传输的单位,因为物理层,数据链路层的传输对于用户是透明的,而这种通信传输是基于二进制的传输。在应用层通常是用byte来作单位,表示文件的大小,在用户看来就是可见的数据大小。比如一个字符就是1byte,如果是汉字,则是2byte。实...

2018-06-06 20:28:33 25799

转载 __dict__与dir()

Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案。__dict__与dir()的区别:dir()是一个函数,返回的是list;__dict__是一个字典,键为属性名,值为属性值;dir()用来寻找一个对象的所有属性,包括__dict__中的属性,__dict__是dir()的子集;​ 并不是所有对象都拥有__dict__属性。许多内建类型...

2018-06-05 10:10:32 263

转载 使用@property

在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:s = Student()s.score = 9999这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数:class Student(object):...

2018-06-05 10:03:53 150

转载 python的metaclass(元类)

类也是对象在理解metaclass之前,我们先要掌握python中的类(class)是什么。python中类的概念,是借鉴自smalltalk语言。在大部分语言中,类指的是"描述如何产生一个对象(object)"的一段代码,这对于python也是如此。>>> class ObjectCreator(object):... pass...>>> ...

2018-06-03 10:47:54 141

原创 python的魔术方法 __call__

__call__在Python中,函数其实是一个对象:>>> f = abs>>> f.__name__'abs'>>> f(-123)123由于 f 可以被调用,所以,f 被称为可调用对象。所有的函数都是可调用对象。一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。我们把 Person...

2018-05-30 16:14:14 532

原创 python的魔术方法 __nonzero__

类的__nonzero__方法用于将类转换为布尔值。通常在用类进行判断和将类转换成布尔值时调用。比如语句if A: print 'foo'中就会调用A.__nonzero__()来判断。下面这个程序应该能帮助你理解__nonzero__的作用。class A:  def __nonzero__(self):    print 'A._nonzero__()'    return True prin...

2018-05-30 15:16:16 476

原创 python的魔术方法 __format__

__format__()方法  __format__()传参方法:someobject.__format__(specification)  specification为指定格式,当应用程序中出现"{0:specification}".format(someobject)或format(someobject, specification)时,会默认以这种方式调用  当specification为"...

2018-05-30 15:10:19 384

原创 python的魔术方法 __unicode__()

对实例使用unicode()时调用。unicode()与str()的区别在于: 前者返回值是unicode, 后者返回值是str。unicode和str都是basestring的子类。当你对一个类只定义了__str__但没定义__unicode__时,__unicode__会根据__str__的返回值自动实现,即return unicode(self.__str__());但反过来则不成立。cla...

2018-05-30 14:49:19 2150

原创 python的魔术方法 __str__ 和__repr__

__str__和__repr__如果要把一个类的实例变成 str,就需要实现特殊方法__str__():class Person(object):    def __init__(self, name, gender):        self.name = name        self.gender = gender    def __str__(self):        return '...

2018-05-30 14:44:02 848

转载 CSRF攻击原理及防御

一、CSRF攻击原理  CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性。想要深入理解CSRF的攻击特性我们有必要了解一下网站session的工作原理。   session我想大家都不陌生,无论你用.net或PHP开发过网站的都肯定用过session对象,然而session它是如何工作的呢?如果你不清楚请往下看...

2018-05-27 16:27:56 144

转载 session的安全性

session原理提到session,大家肯定会联想到登录,登录成功后记录登录状态,同时标记当前登录用户是谁。功能大体上就是这个样子,但是今天要讲的不是功能,而是实现。通过探讨session的实现方式来发掘一些可能你之前不知道的有趣的事情。为了记录session,在客户端和服务器端都要保存数据,客户端记录一个标记,服务器端不但存储了这个标记同时还存储了这个标记映射的数据。好吧,还是说点白话吧,在客...

2018-05-27 16:19:47 558 1

转载 前后端分离之JWT用户认证

在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁,就要再验证一次。所以为了保证系统安全,我们就需要验证用户否处于登录状态。传统方式前后端分离通过Restful API进行数据交互时,如何验证用户的登录信息及权限。在原来的项目中...

2018-05-27 16:01:16 610

转载 rest api

一、REST的由来全称:REST,全称是Resource Representational State Transfer,即:资源在网络中以某种形式进行状态转移。————所谓状态的转移,可参考《HTTP权威指南》一书中对协议的详细解释,此处不过多赘述!出现:REST最早是由Roy Fielding博士发表的论文中提到的,他也曾参与设计了HTTP协议。论文地址:http://www.ics.uci....

2018-05-26 10:59:30 181

转载 session与cookie的作用

在Web发展历史中,session与cookie都是伟大的存在,其初衷都是为了记住用户在网站上的浏览信息,如果没有其他替代品的出现,几乎所有web站点都离不开session与cookie。为什么需要Http协议是无状态的,也就导致服务器无法分辨是谁浏览了网页。为了维持用户在网站的状态,比如登陆、购物车等,出现了先后出现了四种技术,分别是隐藏表单域、URL重写、cookie、session。Cook...

2018-05-13 19:58:44 212

转载 django orm数据库操作

一、DjangoORM 创建基本类型及生成数据库表结构 1、简介 2、创建数据库 表结构 二、Django ORM基本增删改查 1、表数据增删改查 2、表结构修改 三、Django ORM 字段类型 1、字段类型介绍 2、字段参数介绍 3、Django ORM 外键操作一、DjangoORM 创建基本类型及生成数据库表结构1、简介ORM:关系对象映射。定义一个类自动生成数据库的表结构。创建数据库的...

2018-05-12 16:14:24 590

转载 GitHub上README.md教程

README文件后缀名为md。md是markdown的缩写,markdown是一种编辑博客的语言。用惯了可视化的博客编辑器(比如CSDN博客,囧),这种编程式的博客编辑方案着实让人眼前一亮。不过GitHub支持的语法在标准markdown语法的基础上做了修改,称为Github Flavored Markdown,简称GFM。可不是GFW呀。开始编辑README打开你的GitHub的某个项目,我们可...

2018-05-12 15:11:43 265

转载 Git使用详细教程

一:Git是什么?  Git是目前世界上最先进的分布式版本控制系统。  二:SVN与Git的最主要的区别?  SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速...

2018-05-12 15:09:19 161 1

转载 Django 基本命令

1. 新建一个 django project12django-admin.py startproject project_name特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b。2. 新建 app要先进入项目目录下,cd...

2018-05-12 15:04:19 285

转载 werkzeug 详解

首先,先向大家介绍一下什么是 werkzeug,Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等。例如我最常用的 Fla...

2018-05-08 11:24:56 24545 3

转载 wtforms 简介

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3 install wtformsWTforms作用:当网站中需要用到表单时,WTForms变得很有效。应该把表单定义为类,作为单独的一个模块。表单类:class wtforms.form.Form:创建表单:创建表单时,通常是创建一个Form的子类,表单的中的字段作为类的属性,如:from wtfo...

2018-05-08 11:20:16 5220

转载 flask-wtf 详解

一、安装pip install flask-wtf二、创建一个flask的项目引入相对应的包from flask import Flask,render_templateimport flask#引入模块from flask_wtf import FlaskForm,CsrfProtect#如果输入的是字符串那么就用StringField,如果是整数那么就用IntegerFieldfro...

2018-05-08 11:12:29 3349

转载 flask-sqlalchemy 快速入门

Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展。有关完整的指南,请参阅 SQLAlchemy 的 API 文档。一个最小应用常见情况下对于只有一个 Flask 应用,所有您需要做的事情就是创建 Flask 应用,选择加载配置接着创建 SQLAlchemy 对象时候把 Flask 应用传递给它作为参数。一旦创建,这个对象就包含 sqlalche...

2018-05-08 11:08:04 231

转载 Scrapy 和 scrapy-redis的区别

Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。pip install scrapy-redisScrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改)SchedulerDuplication FilterItem Pip...

2018-05-04 16:03:34 257

转载 scrapy框架

Scrapy 框架Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各...

2018-05-04 10:58:52 230

原创 mysql优化

表的优化与列类型选择表的优化:1: 定长与变长分离如 id int, 占4个字节, char(4) 占4个字符长度,也是定长, time 即每一单元值占的字节是固定的.核心且常用字段,宜建成定长,放在一张表.而varchar, text,blob,这种变长字段,适合单放一张表, 用主键与核心表关联起来. 2:常用字段和不常用字段要分离.需要结合网站具体的业务来分析,分析字段的查询场景,查询频度低的...

2018-05-02 10:44:13 164

转载 MySQL存储引擎中的MyISAM和InnoDB区别详解

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。InnoDB,是...

2018-04-30 17:29:01 4104

转载 mysql中的数据类型enum和set

mysql中的字符串数据类型set,enum1、enum  单选字符串数据类型,适合存储表单界面中的“单选值”。  设定enum的时候,需要给定“固定的几个选项”;存储的时候就只存储其中的一个值。  设定enum的格式:    enum("选项1","选项2","选项3",...);  实际上,enum的选项都会对应一个数字,依次是1,2,3,4,5...,最多有65535个选项  使用的时候,可...

2018-04-29 20:52:47 202

转载 数据库的三大范式

   范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2...

2018-04-26 11:44:26 153

转载 Scrapy Shell

Scrapy ShellScrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据。如果安装了 IPython ,Scrapy终端将使用 IPython (替代标准Python终端)。 IPython 终端与其他相比更为强大,提供智能的自动补全,高亮输出,及其他特性。(推荐安装IPy...

2018-04-23 17:27:43 152

原创 Tesseract

import pytesseractfrom PIL import Imageimage = Image.open('./test.png')text = pytesseract.image_to_string(image)print text

2018-04-22 20:40:33 504

原创 斗鱼抓取

#coding:utf-8from selenium import webdriverfrom bs4 import BeautifulSoup as bsdriver = webdriver.PhantomJS()driver.get("https://www.douyu.com/directory/all")while True: soup = bs(driver.page...

2018-04-22 16:16:38 1457

原创 selenium + phantomjs 登录豆瓣

#coding:utf-8from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timeimport urllibimport sysreload(sys) sys.setdefaultencoding( "utf-8" )driver = webdriver.Ph...

2018-04-22 15:51:20 183

转载 Selenium 和 PhantomJS

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。Selenium 自己不带浏...

2018-04-22 14:24:55 123

转载 关于反爬虫,这一篇就够了

你被爬虫侵扰过么?当你看到“爬虫”两个字的时候,是不是已经有点血脉贲张的感觉了?千万要忍耐,稍稍做点什么,就可以在名义上让他们胜利,实际上让他们受损失。一、为什么要反爬虫1、爬虫占总PV比例较高,这样浪费钱(尤其是三月份爬虫)。三月份爬虫是个什么概念呢?每年的三月份我们会迎接一次爬虫高峰期。最初我们百思不得其解。直到有一次,四月份的时候,我们删除了一个url,然后有个爬虫不断的爬取url,导致大量...

2018-04-22 10:00:08 942 3

原创 多线程抓取糗事百科

#!/usr/bin/env python# -*- coding:utf-8 -*-import threadingfrom Queue import Queuefrom lxml import etreeimport requestsimport jsonimport timeclass ThreadCrawl(threading.Thread): def __in...

2018-04-22 09:35:25 237

原创 抓取糗事百科

# -*- coding:utf-8 -*-import requestsfrom lxml import etreepage = 1url = "https://www.qiushibaike.com/text/page/" + str(page)headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows ...

2018-04-21 18:19:52 222

转载 数据提取之JSON与JsonPATH

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。JSON和XML的比较可谓不相上下。Python 2.7中自带了JSON模块,直接import json就可以使用了。官方文档:http://docs.python.org/lib...

2018-04-21 17:36:36 2135

原创 抓取腾讯职位

from bs4 import BeautifulSoupimport urllib2import urllibimport jsondef tencent(): url = 'http://hr.tencent.com/' request = urllib2.Request(url + 'position.php?&start=10#a') respon...

2018-04-21 17:13:37 193

转载 CSS 选择器:BeautifulSoup4

和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器...

2018-04-21 16:07:28 139

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除