对一个列表,比如[1,2,2,2,2,3,3,3,4,4,4,4],现在我们需要统计这个列表里的重复项,并且重复了几次也要统计出来 方法1: 利用集合没有重复元素的特性 1234mylist = [1,2,2,2,2,3,3,3,4,4,4,4]myset = set(mylist) #myset是集合,里面的内容是mylist里面的无重复项for item in myset: print("the %d has found %d" %(item,mylist.count(item))) 方法2: 利用字典的特性来实现。 123456List=[1,2,2,2,2,3,3,3,4,4,4,4]a = {}for i in List: if List.count(i)>1: a[i] = List.count(i)print (a) 方法3: 利用现成collections的Counter模块 123>>> from collections import Counter>>> Counter([ ...
Python
未读简介 SQLAlchemy是用Python编程语言开发的一个开源项目。它提供了SQL工具包和ORM(对象关系映射)工具,使用MIT许可证发行。 SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。它的理念是,SQL数据库的量级和性能比对象集合重要,而对象集合的抽象又重要于表和行。 orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。 orm的优点: 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。 ORM使我们构造固化数据结构变得简单易行。 缺点: 无可避免的,自动化意味着映射和关联管 ...
Python
未读一、介绍 subprocess模块可以生成新的进程,连接到它们的input/output/error管道,同时获取它们的返回码。 二、基本操作方法 subprocess的run、call、check_call、check_output函数 subprocess.run(args[, stdout, stderr, shell …]):执行args命令,返回值为CompletedProcess类; 若未指定stdout,则命令执行后的结果输出到屏幕上,函数返回值CompletedProcess中包含有args和returncode; 若指定有stdout,则命令执行后的结果输出到stdout中,函数返回值CompletedProcess中包含有args、returncode和stdout; 若执行成功,则returncode为0;若执行失败,则returncode为1; 若想获取args命令执行后的输出结果,命令为:output = subprocess.run(args, stdout=subprocess.PIPE).stdout subprocess.call(args[, ...
永久激活 随着2019版的到来,之前的永久激活教程也不生效了,所以今天为大家带来一种新的永久激活方式。 Pycharm2019.3.1 链接:https://pan.baidu.com/s/1kn3U3GQUOt1Z0S8WI6QUHw 密码:4joj 激活前准备工作 激活出现问题可留言或留言中查看 配置文件修改已经不在bin目录下直接修改,而是通过pycharm修改 如果输入code一直弹出来,请去hosts里移除jetbrains相关的项目 1.下载新版破解补丁 链接: https://pan.baidu.com/s/1MlQ3nDepwZQcYYLSWYC1ZA 提取码: 3ysa 下载补丁文件 jetbrains-agent.jar 并将它放置到 pycharm安装目录的\bin目录下(位置可随意,放这里是怕误操作删除了破解文件)。 2.进入项目界面 如果你之前已经使用有效期激活过可跳过此步骤,如果你是刚下载的pycharm,则需要点击激活窗口的“Evaluate for free”免费试用,然后再创建一个空项目,这样就可以进入到pycharm的工作页面 3.修改 ...
##一 介绍 1、memcached & redis是什么? 1234NoSQl数据库,数据存到内存,读取速度快应用场景:页面缓存,好处如下 1、减少数据库压力,提升访问速度 2、在数据挂掉的情况下,仍能保证业务正常运行一段时间,提升安全性 2、memcached与redis区别 12345678910111213##1、类型: memcached:类型单一,只能存字符串"key为字符串"="value也为字符串" redis:支持五大类型 string(字符串) list(链表) set(集合) zset(sorted set --有序集合) hash(哈希类型) ##2、持久化: memcached:断电数据丢失 redis:支持持久化,单独开一个进程完成持久化, 要保持性能就需要关闭持久化,很多公司并不使用持久化功能 3、memcached并未过时 www.oschina.net/news/26691/memcached-timeout ...
Database
未读一 简介 MongoDB是一款强大、灵活、且易于扩展的通用型数据库 1、易用性 1234MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。不采用关系型主要是为了获得更好得扩展性。当然还有一些其他好处,与关系数据库相比,面向文档的数据库不再有“行“(row)的概念取而代之的是更为灵活的“文档”(document)模型。通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的看法一致。另外,不再有预定义模式(predefined schema):文档的键(key)和值(value)不再是固定的类型和大小。由于没有固定的模式,根据需要添加或删除字段变得更容易了。通常由于开发者能够进行快速迭代,所以开发进程得以加快。而且,实验更容易进行。开发者能尝试大量的数据模型,从中选一个最好的。 2、易扩展性 123456应用程序数据集的大小正在以不可思议的速度增长。随着可用带宽的增长和存储器价格的下降,即使是一个小规模的应用程序,需要存储的数据量也可能大的惊人,甚至超出了很多数据库的处理能力。过 ...
一 目标站点分析 123456789101112131415161718192021222324252627282930313233343536373839404142434445#一:实验前准备: 浏览器用Chrome 用Ctrl+Shift+Delete清除浏览器缓存的Cookie 打开network准备抓包,点击Preserve log保留所有日志#二:拉勾网验证流程: 1、请求登录页面: 请求url为:https://passport.lagou.com/login/login.html 请求头并没有什么内容,带上简单的Host,User-Agent把自己伪装成浏览器即可 响应头里包含有效的cookie信息 Set-Cookie:JSESSIONID=ABAAABAAADGAACFC0077EDC55EEC248392A667B221CE7AB; Path=/; HttpOnly Set-Cookie:user_trace_token=201711041 ...
Python
未读12345678910111213141516171819202122232425262728293031323334## requests+Beautifulsoup爬取汽车之家新闻import requestsfrom bs4 import BeautifulSoupresponse=requests.get('https://www.autohome.com.cn/news/')response.encoding='gbk'with open('a.html','w',encoding='utf-8') as f: f.write(response.text)soup=BeautifulSoup(response.text,'lxml')news=soup.find(id='auto-channel-lazyload-article').select('ul li a')for tag in news: lin ...
一 介绍 一些网站会在正常的账号密码认证之外加一些验证码,以此来明确地区分人/机行为,从一定程度上达到反爬的效果,对于简单的校验码Tesserocr就可以搞定,如下 但一些网站加入了滑动验证码,最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/,下图是极验的登录界面 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家企业正在使用极验,每天服务响应超过四亿次,广泛应用于直播视频、金融服务、电子商务、游戏娱乐、政府企业等各大类型网站 对于这类验证,如果我们直接模拟表单请求,繁琐的认证参数与认证流程会让你蛋碎一地,我们可以用selenium驱动浏览器来解决这个问题,大致分为以下几个步骤 123456789101112131415#步骤一:点击按钮,弹出没有缺口的图片#步骤二:获取步骤一的图片#步骤三:点击滑动按钮,弹出带缺口的图片#步骤四:获取带缺口的图片#步骤五:对比两张图片的所有RBG像素点,得到不一样像素点的x值,即要移动的距离#步骤六:模拟人的行为习惯(先匀加速拖动后匀减速拖动),把需要拖动的总距离分成一段一段 ...
一 介绍 原来scrapy的Scheduler维护的是本机的任务队列(存放Request对象及其回调函数等信息)+本机的去重队列(存放访问过的url地址) 所以实现分布式爬取的关键就是,找一台专门的主机上运行一个共享的队列比如Redis, 然后重写Scrapy的Scheduler,让新的Scheduler到共享队列存取Request,并且去除重复的Request请求,所以总结下来,实现分布式的关键就是三点: 123##1、共享队列##2、重写Scheduler,让其无论是去重还是任务都去访问共享队列##3、为Scheduler定制去重规则(利用redis的集合类型) 以上三点便是scrapy-redis组件的核心功能 12345##安装:pip3 install scrapy-redis##源码:D:\python3.6\Lib\site-packages\scrapy_redis 二 scrapy-redis组件 1、只使用scrapy-redis的去重功能 使用共享去重队列+源码分析 1234567891011121314151617181920212223242526272 ...