自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 python + selenium上传文件

selenium 上传文件在使用selenium 上传文件时使用最多的是弹出windows弹出窗口,一般都是input标签 type属性是file的 这样的最简单最好处理driver.find_element_by_css_selector("[type='file']").send_keys("路径")这样就可以上传了。至于其他几种没有使用的,也有点复杂就不在这里说了。...

2019-10-17 17:32:19 183

原创 获取句柄,显示指定句柄

获取应用窗口句柄导入包获取指定标题窗口的句柄获取当前窗口句柄将指定句柄窗口显示至最上面导入包需要用到win32包,可以先使用pip install pywin32下载这个包,然后导入import win32guiimport win32conimport time获取指定标题窗口的句柄比如获取微信的窗口句柄hld = win32gui.FindWindow(None,u"微信")...

2019-08-22 11:15:35 530

原创 python模拟按键操作

键盘虚拟码VK_CODE = { 'backspace':0x08, 'tab':0x09, 'clear':0x0C, 'enter':0x0D, 'shift':0x10, 'ctrl':0x11, 'alt':0x12, 'pause':0x13, 'caps_lock':0x14, 'esc':0x1B, ...

2019-07-04 15:38:27 13164 3

原创 lxml提取数据

1. lxml的认识在前面学习了xpath的语法,那么在代码中我们如何使用xpath呢,对应的我们需要lxml安装方式:pip install lxml2. lxml的使用2.1 lxml模块的入门使用导入lxml 的 etree 库 (导入没有提示不代表不能用)from lxml import etree利用etree.HTML,将字符串转化为Element对象,Ele...

2019-01-24 15:53:07 951

原创 Xpath提取数据

1. 为什么要学习xpath和lxmllxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息2. 什么是xpathXPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历。W3School官方文档:http://www.w...

2019-01-24 15:41:46 1304

原创 正则提取数据

1什么是正则表达式用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。2. 正则表达式的常见语法知识点正则中的字符正则中的预定义字符集正则中的数量词正则的语法很多,不能够全部复习,对于其他的语法,可以临时查阅资料,比如:表示或还能使用|3. re模块的常见方法pattern.match(从头找一个)p...

2019-01-24 15:23:00 524

原创 Json提取数据

1.为什么要复习json由于把json数据转化为python内建数据类型很简单,所以爬虫中,如果我们能够找到返回json数据的URL,就会尽量使用这种URL,而很多地方也都会返回json2. 什么是jsonJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比...

2019-01-24 10:25:09 5834

原创 requests模块的深入使用

1.requests模块发送POST请求1.1 哪些地方我们会用到POST请求:登录注册( POST 比 GET 更安全)需要传输大文本内容的时候( POST 请求对数据长度没有要求)所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求1.2 使用requests模块发送post请求用法: response = requests.post(“http://ww...

2019-01-24 09:56:23 168

原创 爬虫中requests模块的基本使用

为什么要重点学习requests模块,而不是urllibrequests的底层实现就是urllibrequests在python2 和python3中通用,方法完全一样requests简单易用Requests能够自动帮助我们解压(gzip压缩的等)网页内容requests的作用作用:发送网络请求,返回响应数据中文文档 : http://docs.python-requests...

2019-01-24 09:41:00 207

原创 字符串相关的复习

Unicode UTF8 ASCII的补充字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等字符集(Character set)是多个字符的集合字符集包括:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等ASCII编码是1个字节,而Unicode编码通常是2个字节。UTF-8是Unicode的实现方式之一,UTF...

2019-01-24 09:33:39 110

原创 爬虫的分类和爬虫的流程

爬虫的分类在上一小结中,我们介绍爬虫爬取到的数据用途的时候,给大家举了两个例子,其实就是两种不同类型的爬虫根据被爬网站的数量的不同,我们把爬虫分为:通用爬虫 :通常指搜索引擎的爬虫聚焦爬虫 :针对特定网站的爬虫爬虫的流程请思考:如果自己要实现一个和百度新闻一样的网站需要怎么做?聚焦爬虫的工作流程如下:搜索引擎的工作流程如下:但是搜索引擎类似的通用爬虫的工作流程有些不...

2019-01-24 09:23:51 1650

转载 CSRF

CSRFCSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。 CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。 包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账...... 造成的问题:个人隐私泄露以及财产安全。CSRF攻击示意图客户端访问服务器时没有同服务器做安全验证防止 CSRF 攻击步骤...

2019-01-24 09:07:48 101

原创 模板特有变量和函数

模板中特有的变量和函数你可以在自己的模板中访问一些 Flask 默认内置的函数和对象config你可以从模板中直接访问Flask当前的config对象:{{config.SQLALCHEMY_DATABASE_URI}}sqlite:///database.dbrequest就是flask中代表当前请求的request对象:{{request.url}}http://127.0...

2019-01-24 09:07:07 154

原创 Flask中的上下文

上下文上下文:相当于一个容器,保存了 Flask 程序运行过程中的一些信息。Flask中有两种上下文,请求上下文和应用上下文请求上下文(request context)思考:在视图函数中,如何取到当前请求的相关数据?比如:请求地址,请求方式,cookie等等在 flask 中,可以直接在视图函数中使用 request 这个对象进行获取相关数据,而 request 就是请求上下文的对象,保...

2019-01-23 20:09:32 138

原创 Flask中的request

requestrequest 就是flask中代表当前请求的 request 对象,其中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求)常用的属性如下:属性说明类型data记录请求的数据,并转换为字符串*form记录请求中的表单数据MultiDictargs记录请求中的查询参数MultiDictcookies...

2019-01-23 20:01:59 176

原创 钩子函数

请求勾子在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在请求开始时,建立数据库连接;在请求开始时,根据需求进行权限校验;在请求结束时,指定数据的交互格式;为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:before_first_request– 在处理第...

2019-01-23 19:58:33 793

原创 异常捕获

异常捕获HTTP 异常主动抛出abort 方法– 抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404)。参数:– code – HTTP的错误状态码# abort(404)abort(500)抛出状态码的话,只能抛出 HTTP 协议的错误状态码捕获错误errorhandler 装饰器...

2019-01-23 19:55:24 91

原创 如何搭建虚拟环境

安装虚拟环境的命令 :sudo pip install virtualenvsudo pip install virtualenvwrapper安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:# 1、创建目录用来存放虚拟环境mkdir $HOME/.virtualenvs# 2、打开~/.bashrc文件,并添加如下:export WORKON_...

2019-01-23 19:51:48 139

原创 Request 与 Response

RequestREST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进行parse解析,解析...

2019-01-23 11:32:03 164

原创 反序列化使用

验证使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。在获取反序列化的数据前,必须调用is_valid()方法进行验证,验证成功返回True,否则返回False。验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误。如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRO...

2019-01-23 11:23:54 207

原创 模型类序列化器ModelSerialize

模型类序列化器ModelSerializer如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段基于模型类自动为Serializer生成validators,比如unique_t...

2019-01-23 11:18:07 595

原创 序列化使用

基本使用1) 先查询出一个图书对象from booktest.models import BookInfobook = BookInfo.objects.get(id=2)2) 构造序列化器对象from booktest.serializers import BookInfoSerializerserializer = BookInfoSerializer(book)3)获取...

2019-01-23 11:13:46 81

原创 RESTful设计方法

域名应该尽量将API部署在专用域名之下。https://api.example.com如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。https://example.org/api/版本(Versioning)应该将API的版本号放入URL。http://www.example.com/app/1.0/foohttp://www.example.com/ap...

2019-01-23 10:49:46 68

原创 装饰器

def w1(func): def inner(): # 验证1 # 验证2 # 验证3 func() return inner@w1def f1(): print('f1')python解释器就会从上到下解释代码,步骤如下:def w1(func): ==>将w1函数加载到内存@w1没错...

2019-01-19 21:27:25 81

原创 闭包

什么是闭包# 定义一个函数def test(number): # 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包 def test_in(number_in): print("in test_in 函数, number_in is %d" % number_in) return numbe...

2019-01-19 21:02:08 237

原创 线程

线程python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用1. 使用threading模块单线程执行#coding=utf-8import timedef saySorry(): print("亲爱的,我错了,我能吃饭了吗?") time.sleep(1)if __name__ ==...

2019-01-17 19:52:45 126

原创 TCP/IP协议

TCP/IP协议(族)早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议族(Internet Protocol Suite)就是通用协议标准。因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所...

2019-01-17 19:44:32 110

原创 Tcp的长短链接

tcp长连接和短连接TCP在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立通过三次握手,释放则需要四次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的。TCP通信的整个过程,如下图:TCP短连接模拟一种TCP短连接的情况:client 向 server 发起连接请求serve...

2019-01-17 19:41:51 168

原创 vim编辑器的简单操作

vim基础操作vim是从 vi 发展出来的一个文本编辑器 。代码补完、编译及错误跳转等方便编程的功能特别丰富进入插入模式:i: 插入光标前一个字符I: 插入行首a: 插入光标后一个字符A: 插入行未o: 向下新开一行,插入行首O: 向上新开一行,插入行首进入命令模式:ESC:从插入模式或末行模式进入命令模式移动光标:h: 左移j: 下移k: 上移l: 右移M: 光标...

2019-01-17 19:34:37 73

原创 数组列表切片问题

数组切片python2和python3中不同python2 中数组切片得到一个列表python3 中数组切片得到一个对象地址python2中list = range(10)print(list)# 得到一个列表[1,2,3,4,5,6,7,8,9]epython3中list = range(10)print(list)# 得到 range(0,10) 并不是得到一个列表...

2019-01-16 20:23:50 164

原创 多线程、多进程

多线程、多进程、协程:​ 是什么? 能干什么?​ 单线程情况下,执行效率低。系统的资源没有得到充分利用。​ 计算密集型(运算量比较大)、IO密集型(CPU空闲,输入输出较多)​ 怎么干?​ 爬虫:(IO密集型)​ 多线程:​ 横向:所有的程序的执行都在一个线程中,程序启动时,启动多线程,每个线程跑同样的代码。​ 纵向:将程序进行拆分,每个线程跑特定的程序,实现一部分...

2019-01-16 18:00:25 82

原创 增量式爬虫和去重

增量式爬虫:在上一次的基础上继续爬取,爬过的不再爬取。​ 分布式爬虫:多台服务器可以共享两个队列,所以可以并发来爬取数据。Scrapy-Redis插件:​ 安装 pip install scrapy-redis​ 与原来的爬虫相比,只有设置文件中的4行代码有区别:增量式和分布式爬虫核心代码REDIS_URL = "redis://127.0.0.1:6379"#指定了去重的类DUP...

2019-01-16 17:56:51 2303

原创 Windows安装Redis

windows 64位 Redis数据库安装下载然后手动启动Redis服务再次进入CMD终端下载Github 下载地址:https://github.com/MicrosoftArchive/redis/tags版本全、新个人网盘 压缩文件https://pan.baidu.com/disk/home#/all?path=%2F&vmode=listRedis-3.2版本建议...

2019-01-16 16:07:04 109

空空如也

空空如也

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

TA关注的人

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