自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 爬虫与滑动验证背后的人工智能博弈

滑动验证已经成为反爬虫的新战场,重要应用都加入了滑动来防止爬虫的登陆,在几个月前在公众号分享过处理滑动验证的两个核心点:一个是缺口距离的识别,一个是滑动轨迹的生成;都是干货,缺口的识别使用五行代码足以达到95%的识别率,并且识别出来的距离基本分毫不差;轨迹的生成有两种思路利用物理的加减速方程和人为拖动的轨迹曲线方程;这些都在之前详细讲过,并在后台推出滑动验证的免费服务接口:http:/...

2019-08-22 17:27:32 1160

原创 耗时一个月基于Django2.1+xadmin的个人博客正式上线

经过一个半月的开发和一个星期的测试,个人博客《like in love》终于上线网址(www.likeinlove.com|点击即可访问)。image本博客使用了《今夕何夕》前端模板,Django2.1做后台框架、xadmin做管理后台,实现了一些特色功能:后台编辑器的丰富功能,支持文章多图模式,可从正文选择封面、本地多图上传封面、网络图库封面。image多级评论系统,...

2019-06-25 22:43:01 869

原创 python高准确率滑动验证破解平台,提供免费api接口,解决反爬虫

image滑动验证是网站反爬虫、反作弊的升级,滑动验证也是机器学习在反爬虫、反作弊领域的应用;此前停止了每日一更的专题分享,进入了不定期的项目分享,本项目就是分享的第一个。image本项目也是一个简单的全栈项目,使用tornado做的后端、Bootstrap4做的前端;核心的识别问题在此前讲过,因此不做原理上的介绍。为了对大家有帮助,因此该项目已经部署上线并提供了直接返回j...

2019-05-13 10:01:05 1875

原创 pyppeteer持久化修改网站检测浏览器的特征值

在互联网前沿具有价值的网站,在反爬虫领域也做出了深有成效的反爬虫措施,其中浏览器环境检测、用户行为检测是目前对爬虫杀伤力最大的两条技术路线;而浏览器环境检测是以webdriver等几十个特征值为基础的爬虫识别;此前讲过几篇关于浏览器识别的文章:《selenium的封杀与突破,记录一次出师未捷身先死,淘宝、美团对爬虫的深入打击》《Python爬虫中深不可测的ua参数,爬虫的身份证》现...

2019-04-29 09:54:26 2560 3

原创 pyppeteer最为核心类Page的接口方法(下)

重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味!在上一篇《pyppeteer最为核心类Page的接口方法》讲了大部分pyppeteer的Page类的接口,与selenium相比增强了与页面js的交互功能,同时增加了设备的伪装和模拟能力,一方是因为pyppeteer库是源于puppeteer,而puppeteer是Go...

2019-04-29 09:50:12 9962

原创 pyppeteer最为核心类Page的接口方法

重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味!Page类是pyppeteer的核心,其价值就犹如selenium的driver,具体的页面操作都在Page类上;Page与driver比较最具优势的是和js的交互,可以修改本地js、css,也可以给页面添加js函数,甚至添加自定义函数到浏览器的windows属性中,也...

2019-04-29 09:43:45 6813 1

原创 pyppeteer的Browser类及其BrowserContext类

在昨天的文章中《Python中与selenium齐名的pyppeteer库》我们对pyppeteer做了一个大致的介绍,后面将pyppeteer作为一个系列来讲,大致按照文档的思路来,再配合一些实践代码,来达到深入理解的目的。启动器import asynciofrom pyppeteer import launchasync def main():browser = await l...

2019-04-29 09:39:24 3083

原创 Python中与selenium齐名的pyppeteer库

如果说在Python中还有一款自动化工具能和selenium媲美,那么无疑是pyppeteer,pyppeteer是puppeteer的Python版本,puppeteer是Google开源的一个js库,通过一系列高级接口和Chrome或Chromium在DevTools协议下交互,其实现功能如下:生成页面的截图和PDF。 抓取SPA(单页应用程序)并渲染页面 自动提交表单,UI测试,键盘...

2019-04-24 22:57:06 4593

原创 python数据结构与算法总结

python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章:《数据结构和算法对python意味着什么?》《顺序表数据结构在python中的应用》《python实现单向链表数据结构及其基本方法》《python实现单向循环链表数据结构及其方法》《python实现双向链表基本结构及其基本方法》《python实现双向循环链表基本结构及其基本方法》《py...

2019-04-24 09:48:14 26987 4

原创 python中的哈希表数据结构

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。python中的dict类型就是哈希表的原理,存储方式是key-value,通过键来快速的访问value,字典在访问操作上时间复杂度为O(1)。用python实...

2019-04-24 09:44:15 1518

原创 python实现顺序查找和哈希查找算法

顺序查找顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法,顺序查找是最简单的搜索算法,其实现如下:def sequential_search(items, item): for i in items: if i == item: return i else: return False适用于线性表...

2019-04-24 09:37:18 758

原创 python实现二分查找算法

二分查找算法,是常见的搜索算法之一,适用于有序的序列,通过将序列不断的对折分为区间,从而确定查找值是否存在,优点是速度快。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找...

2019-04-21 23:32:49 276

原创 python实现顺序查找和哈希查找算法

顺序查找顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法,顺序查找是最简单的搜索算法,其实现如下:def sequential_search(items, item): for i in items: if i == item: return i else: return False适用于线性表...

2019-04-21 23:24:03 1205

原创 python实现归并算法

归并排序是采用分治法的一个非常典型的应用,另一个可以采用分治法的是快速排序,归并算法比快速排序速度稍低。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。如 设有数列{6,202,100,301,38,8...

2019-04-19 22:46:44 1549

原创 python实现插入排序算法

插入排序,其原理是通过构建一个初始的有序序列,然后从无需序列中抽取元素,插入到有序序列的相对排序位置,就像将一堆编号混乱的书,一本一本的放到书架上,找到上下编号之间的位置插入,最后完成整理。python实现插入排序并不难,从第二个位置开始遍历,与它前面的元素相比较,如果比前面元素小就交换位置,实现如下:def insert_sort(items): for i in range(...

2019-04-18 23:56:02 322 1

原创 python实现希尔排序算法

Python之战 2019.04.18 23:51 字数 532 阅读 0评论 0喜欢 0编辑文章希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔...

2019-04-18 23:52:41 390

原创 python实现插入排序算法

插入排序,其原理是通过构建一个初始的有序序列,然后从无需序列中抽取元素,插入到有序序列的相对排序位置,就像将一堆编号混乱的书,一本一本的放到书架上,找到上下编号之间的位置插入,最后完成整理。python实现插入排序并不难,从第二个位置开始遍历,与它前面的元素相比较,如果比前面元素小就交换位置,实现如下:def insert_sort(items): for i in range(...

2019-04-16 23:28:20 1108

原创 python实现选择排序算法

选择排序,简单而直观,其原理是把序列中的最小值或者最大值找出来放在起始位置,然后再从剩下的序列中找出极值放到起始位置之后,以此类推最后就完成排序。完成这个过程大致思想:首先需要一个记录器,记录排序排到第几个位置了,然后在剩余的序列中找到极值下标,最后将记录器位置和极值位置元素交换,完成本次选择排序。用python实现比较简单:def select_sort(items): n...

2019-04-15 23:07:37 443

原创 python实现冒泡排序算法

冒泡排序,一个经典的排序算法,因在算法运行中,极值会像水底的气泡一样逐渐冒出来,因此而得名。冒泡排序的过程是比较两个相邻元素的大小,然后根据大小交换位置,这样从列表左端开始冒泡,最后最大值会依次从右端冒出。imagepython实现冒泡排序:def bubble_sort(nums): for i in range(len(nums) - 1): fo...

2019-04-14 23:37:40 1108

原创 平衡二叉树简介

平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点总数的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于...

2019-04-13 22:14:43 1735

原创 python实现二叉树数据结构的多种遍历方式

二叉树的遍历比较有意思,首先是遍历的方式比较多,大的来说分为深度遍历和广度遍历,深度遍历又分为先序遍历/中序遍历/后序遍历,其中深度遍历用递归来实现,广度遍历用队列来实现。深度遍历和广度遍历是相对的概念,深度遍历是沿着树的深度遍历树的节点,尽可能深的搜索树的分支;广度遍历是从树的根层级开始一层一层的遍历,遍历完上一层再遍历下一层;如下:image深度遍历顺序:0-1-3-7-8-4...

2019-04-12 22:54:40 234

原创 python实现二叉树及其基本方法

什么是二叉树:每个节点最多有两个子树的树结构,通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树具备以下数学性质: 在二叉树的第i层上至多有2^(i-1)个结点(i>0) 深度为k的二叉树至多有2^k - 1个结点(k>0) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N...

2019-04-11 21:23:25 1327

原创 python中的树数据结构

线性数据中的典型顺序表和链表已经讲完:《顺序表数据结构在python中的应用》《python实现单向链表数据结构及其基本方法》《python实现单向循环链表数据结构及其方法》《python实现双向链表基本结构及其基本方法》《python实现双向循环链表基本结构及其基本方法》《python实现堆栈数据结构及其基本方法》《Python实现双端队列数据结构及其基本方法》下...

2019-04-10 20:02:19 2186

原创 Python实现双端队列数据结构及其基本方法

队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头,队列中没有元素时,称为空队列。image队列可由线性表来实现,包括列表和链表都可实现队列,不过在安全性上来说链表比较安全,但是增加额外的内存开销,一般考虑列表来实现队列。查看Python...

2019-04-09 21:05:34 422

原创 python实现堆栈数据结构及其基本方法

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈可以用来在函数调用的时候存储断点,做递归时要用到栈,其基本模型如下:...

2019-04-08 21:16:38 786

原创 python实现双向循环链表基本结构及其基本方法

双向循环链表是在双向链表的基础上发展的,双向链表的最后一个节点指向起始节点,起始节点的上一个节点指向最后一个节点,就得到双向循环链表。双向循环链表比双向链表具有更多的优势,节点的增加和删除有很多优化的地方,从起点开始不必循环完整个链表就可以增加或删除节点。首先定义双向链表的基本类和节点的基本类:imageclass Node: def __init__(self, i...

2019-04-07 23:45:10 320

原创 python实现双向链表基本结构及其基本方法

双向链表是在单向链表的基础上更为复杂的数据结构,其中一个节点除了含有自身信息外,还应该含有下连接一下个节点和上一个节点的信息。双向链表适用于需要双向查找节点值的场景中,在数据量难以估计并且数据增删操作频繁的场景中,双向链表有一定优势;链表在内存中呈现的状态是离散的地址块,不需要像列表一样预先分配内存空间,在内存的充分利用上更胜一筹,不过增加了一些额外开销。双向链表结构如图:imag...

2019-04-06 22:24:10 289

原创 Selenium最全超时等待问题的处理方案

Selenium广泛应用于自动化测试和自动化业务开发,同时在网络爬虫中也有较多的应用,使用Selenium有两个核心的问题:第一个是如何在爬虫领域不被识别出来,另一个是在自动化领域如何解决超时加载的问题。今天来总结一下处理Selenium在自动化业务中的超时加载,让程序不在奔溃,同时能准确的获取信息。首先需要区分两种超时情况,一种是页面加载出现的超时,一种是获取页面元素的超时。对于页面...

2019-04-05 23:13:55 12899 1

原创 python实现单向循环链表数据结构及其方法

首先要说明一下研究数据结构有什么用,可能就像高数之类的在生活中并没有多少用处,但是离不开他,很多大公司面试也会问这个东西;但是要落实到某一个具体的业务场景,我也不知道,但并不代表这些东西没用,也可能是这些模型只是为了让我们能理解更多有用的东西。今天说的是单向循环链表,昨天说了单向链表《python实现单向链表数据结构及其基本方法》,在此基础上我们说单向循环链表,其基本模型示图如下:im...

2019-04-04 23:08:22 312

原创 python实现单向链表数据结构及其基本方法

顺序表和链表作为线性表的典型结构,上一篇已经说了顺序表在python中的典型应用:list和tuple,《顺序表数据结构在python中的应用》,今天来实现链表的基本结构之一:单向链表。单向链表模型:[图片上传中...(image-ae2143-1554301040150-1)]链表是一个个节点连接而成,节点由两部分构成:元素域、链接域;链接域链接下一个节点,从而构成一条链条,而pyt...

2019-04-03 22:17:11 381

原创 顺序表数据结构在python中的应用

Python之战2019.04.02 21:59字数 794阅读 0评论 0喜欢 0编辑文章数据结构不仅仅指的数据值在逻辑上的结构,更有在存储空间上的位置结构,顺序表,故名思意是有一定顺序的数据结构。顺序表最基本模型如图:image对于基本布局顺序表而言,它存储相同单元大小并且在内存地址上连续的数据,逻辑地址是其元素的逻辑顺序,物理地址第一个元素的内存地址加上离第...

2019-04-02 21:59:36 610

原创 数据结构和算法对python意味着什么?

数据结构和算法对于python而言是他的灵魂;程序是数据结构加上算法来实现的,对于任何一门编程语言都离不开数据结构和算法,但是对于python而言内置了基础的数据结构如列表、字典、集合等,再加上众多包,所以弱化了数据结构和算法的使用。但是在一些特定领域对数据结构和算法的要求也很高,如大数据分析和人工智能之中应用广泛;同时数据结构和算法关系程序运行的效率,是每个程序员不得不考虑的问题。本月专题...

2019-04-01 22:40:47 639

原创 scrapy相关专题总结

本月的scrapy已经写完,关于scrapy写了常用的中间件、数据管道、以及scrapy的相关源码,但是感觉可写的内容不是很多,要门是使用相关的要么是一些不用关注的源码。所以写完scrapy之后还写了些一些其他内容,算是在充数吧,同时预下一个专题是python的数据结构和算法,将对九大算法及其常用数据结构分享,同时将算法应用于数据结构上。本月scrapy专题相关内容:《Scrapy框架...

2019-03-31 21:42:11 173

原创 python中is、id、==与浅拷贝和深拷贝

python中的3个常见操作符is、id、==,三个的使用方法和应用场景不近相同,有各自适合的应用场景is:用于比较两个对应是否是同一个引用==:用于比较两个之是否相同id:用于获取对象的内存地址id(5)1492768624a = 4b = 4a == bTruea is bTruea = 257b = 257a == bTruea is bFalse两...

2019-03-30 23:34:02 455 1

原创 selenium启动Chrome配置参数问题

每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器。selenium启动配置参数接收是ChromeOptions类,创建方式如下:from selenium impor...

2019-03-29 23:46:07 6812

翻译 scrapy常用设置参考手册

内置设置参考以下是所有可用Scrapy设置的列表,按字母顺序排列,以及它们的默认值和适用范围。范围(如果可用)显示设置的使用位置,如果它与任何特定组件相关联。在那种情况下,将显示该组件的模块,通常是扩展,中间件或管道。它还意味着必须启用该组件才能使设置产生任何效果。AWS_ACCESS_KEY_ID默认:None需要访问Amazon Web服务的代码使用的AWS访问密钥,例如...

2019-03-28 23:17:15 948

原创 python常用内建函数

内建函数是python解释器内置的函数,由cpython执行的c语言编写的函数,在加载速度上优于开发者自定义的函数,上一篇将python常用内建属性说了《python常用内建属性大全》,本篇说常用的内建函数。当打开python解释器后输入dir(builtins)即可列举出python所有的内建函数:['ArithmeticError', 'AssertionError', 'Attri...

2019-03-28 18:40:59 311

原创 解决sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2027, 'Malformed packet')

Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context context) File "/usr/local/lib/python3.7/site-packages...

2019-03-27 13:54:26 19565 1

原创 requests库核心API源码分析

requests库是python爬虫使用频率最高的库,在网络请求中发挥着重要的作用,这边文章浅析requests的API源码。该库文件结构如图:提供的核心接口在__init__文件中,如下:from.importutilsfrom.importpackagesfrom.modelsimportRequest,Response,PreparedReq...

2019-03-26 23:04:42 460

原创 scrapy爬虫加载API,配置自定义加载模块

当我们在scrapy中写了几个爬虫程序之后,他们是怎么被检索出来的,又是怎么被加载的?这就涉及到爬虫加载的API,今天我们就来分享爬虫加载过程及其自定义加载程序。SpiderLoader API该API是爬虫实例化API,主要实现一个类SpiderLoaderclass scrapy.loader.SpiderLoader该类负责检索和处理项目中定义的spider类。可以通过在...

2019-03-25 22:48:42 1376 1

空空如也

空空如也

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

TA关注的人

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