自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Python实用技法第17篇:将名称映射到序列的元素中

1、需求我们的代码是通过位置(即索引或下标)来访问列表会元组的,但有时候这会让代码变得有些难以阅读。我们希望可以通过名称来访问元素,以此减少结构中对位置的依赖性。2、解决方案相比普通的元组,collections.namedtuple()(命名元组)只增加了极少的开销就提供了这些便利。实际上collections.namedtuple()是一个工厂方法,它返回的是Python中标准元组类...

2019-08-12 17:07:11 203

转载 Python实用技法第16篇:从字典中提取子集

1、需求我们想创建一个字典,其本身是另一个字典的子集。2、解决方案利用字典推导式可轻松解决。prices={'a':1.1,'b':2.2,'c':3.3,'d':4.4,'e':5.5}p1={key:value for key ,value in prices.items() if value>3}print(p1)names={'a','b'}p2={...

2019-08-12 17:04:43 175

转载 Python实用技法第15篇:筛选序列中的元素

1、需求

2019-08-10 17:12:50 184

转载 Python实用技法第14篇:根据字段将记录分组:itertools.groupby()

1、需求

2019-08-10 17:12:09 129

转载 Python实用技法第13篇:对自定义类对象排序:attrgetter

1、需求

2019-08-10 17:11:36 81

转载 Python实用技法第12篇:通过公共键对字典列表排序:itemgetter

1、需求

2019-08-10 17:10:10 69

转载 Python实用技法第11篇:找出序列中出现次数最多的元素

1、需求

2019-08-10 17:09:36 116

转载 Python实用技法第10篇:对切片命名

1、需求我们的代码已经变得无法阅读,到处都是硬编码的切片索引,我们想优化他们。2、解决方案代码中如果有很多硬编码的索引值,将导致可读性和维护性都不佳。内置的slice()函数会创建一个切片对象,可以用在任何运行进行切片操作的地方。items=[0,1,2,3,4,5,6]a=slice(2,4)print(items[2:4])print(items[a])items[a]...

2019-08-09 16:10:42 81

转载 Python实用技法第9篇:从序列中移除重复项且保持元素间顺序不变

1、需求我们想去除序列出现的重复元素,但仍然保持剩下的元素的顺序不变。如果只是想要去重,那么通常足够简单的方法就是构建一个集合:a=[1,5,4,36,7,8,2,3,5,7]#结果为:{1, 2, 3, 4, 5, 36, 7, 8}print(set(a))2、解决方案如果序列中的值是可哈希的(hashable),那么这个问题可以通过使用集合和生成器轻松解决。如果一个对象...

2019-08-09 16:10:16 85

转载 Python实用技法第8篇:在两个字典中寻找相同点

1、需求现在有两个字典,我们想找出它们中间可能相同的地方(相同的键、相同的值)2、解决方案只需要用过keys()或者item()方法执行常见的集合操作(并集、交集、差集)即可。a={ 'x':1, 'y':2, 'z':3}b={ 'w':10, 'x':11, 'y':2}#找出 在两个字典中读存在的键print(a.key...

2019-08-09 16:09:38 89

转载 Python实用技法第7篇:字典上对数据执行计算:求最小值、最大值、排序

1、需求我们想在字典上对数据执行各式各样的计算,例如:最大值、最小值、排序等2、解决方案zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。假设有一个字典,在股票名称和对应价格之间做了映射:prices={'ACME':45.23,'AAPL':612.78,'IBM':205.55,'HPQ':37.20,'FB':...

2019-08-09 16:06:09 356

转载 Python实用技法第6篇:让字典保持有序

1、需求我们想创建一个字典,同时当对字典做迭代或序列化操作时,也能控制其中元素的顺序。2、解决方案要控制字典中元素的顺序,可以使用collections模块中的OrderedDict类。当对字典做迭代时,它会严格按照元素初始添加的顺序进行。from collections import OrderedDictd=OrderedDict()d['a']=1d['b']=2d['...

2019-08-09 16:02:55 82

转载 Python实用技法第5篇:一键多值字典:defaultdict

1、需求我们想要一个能将键(key)映射到多个值的字(即所谓的一键多值字典)2、解决方案字典是一种关联容器,每个键都映射到一个单独的值上。如果想让键映射到多个值,需要将这些多个值保存到另一个容器(列表或者集合)中。可以这样创建字典:d={‘a’:[1,2,3],'b':[4,5]}或者这样创建:d={'a':{1,2,3},'b':{4,5}}要使用列表还是集合完全...

2019-08-08 19:35:59 84

转载 Python实用技法第4篇:实现优先级队列

1、需求我们想要实现一个队列,它能够以给定的优先级来对元素排序,且每次pop操作时都会返回优先级最高的那个元素2、解决方案利用heapq模块实现代码:import heapq#利用heapq实现一个简答的优先级队列class PriorityQueue: def __init__(self): self._queue=[] self....

2019-08-08 19:35:15 70

转载 Python实用技法第3篇:找到最大或最小的N个元素

1、需求我们想在某个集合中找出最大或最小的N个元素2、解决方案heapq模块中有两个函数:nlargest()和nsmallest()代码:import heapqnums=[1,444,66,77,34,67,2,6,8,2,4,9,556]print(heapq.nlargest(3,nums))print(heapq.nsmallest(3,nums))结果:[...

2019-08-08 19:34:07 76

转载 Python实用技法第2篇:使用deque保留最新的N个元素

1、需求做一个有限个数的历史记录。2、解决方案deque(maxlen=N),创建一个固定长度的队列,当有新记录加入并且队列已满时会自动移除最老的那条记录。代码:from collections import dequeq=deque(maxlen=3)q.append(1)q.append(2)q.append(3)print(q)q.append(4)pri...

2019-08-08 19:33:32 140

转载 Python实用技法第1篇:可迭代对象分解为单独的变量

1、需求现在有一个包含N个元素的元组或序列,现在想将它分解为N个单独的变量。2、解决方案在python中,任何序列、元组、可序列号对象,都可以通过一个简单的赋值操作来分解为单独的变量。唯一要求是变量的总数和结构要和序列的相吻合。如果不吻合就会报错实例展示:#将序列分解为单独的变量m=(1,2)x,y=mprint("x=",x)print("y=",y)print("*...

2019-08-08 19:33:05 84

转载 Python3网络爬虫实战-45、微博宫格验证码的识别

本节我们来介绍一下新浪微博宫格验证码的识别,此验证码是一种新型交互式验证码,每个宫格之间会有一条指示连线,指示了我们应该的滑动轨迹,我们需要按照滑动轨迹依次从起始宫格一直滑动到终止宫格才可以完成验证,如图 8-24 所示:图 8-24 验证码示例鼠标滑动后的轨迹会以×××的连线来标识,如图 8-25 所示:图 8-25 滑动过程我们可以访问新浪微博移动版登录页面就可以看到如上验证码,链...

2019-08-07 22:40:02 118

转载 Python3网络爬虫实战-44、点触点选验证码的识别

上一节我们实现了极验验证码的识别,但是除了极验其实还有另一种常见的且应用广泛的验证码,比较有代表性的就是点触验证码。可能你对这个名字比较陌生,但是肯定见过类似的验证码,比如 12306,这就是一种典型的点触验证码,如图 8-18 所示:图 8-18 12306 验证码我们需要直接点击图中符合要求的图,如果所有答案均正确才会验证成功,如果有一个答案错误,验证就会失败,这种验证码就可以称之为点...

2019-08-07 22:39:32 348

转载 Python3网络爬虫实战-43、极验滑动验证码的识别

上节我们了解了图形验证码的识别,简单的图形验证码我们可以直接利用 Tesserocr 来识别,但是近几年又出现了一些新型验证码,如滑动验证码,比较有代表性的就是极验验证码,它需要拖动拼合滑块才可以完成验证,相对图形验证码来说识别难度上升了几个等级,本节来讲解下极验验证码的识别过程。1. 本节目标本节我们的目标是用程序来识别并通过极验验证码的验证,其步骤有分析识别思路、识别缺口位置、生成滑块拖动...

2019-08-07 22:38:47 426

转载 Python3网络爬虫实战-42、图形验证码的识别

本节我们首先来尝试识别最简单的一种验证码,图形验证码,这种验证码出现的最早,现在也很常见,一般是四位字母或者数字组成的,例如中国知网的注册页面就有类似的验证码,链接为:http://my.cnki.net/elibregister/commonRegister.aspx,页面如图 8-1 所示:图 8-1 知网注册页面表单的最后一项就是图形验证码,我们必须完全输入正确图中的字符才可以完成注册...

2019-08-07 22:38:09 197

转载 Python3网络爬虫实战-41、图形验证码的识别

本节我们首先来尝试识别最简单的一种验证码,图形验证码,这种验证码出现的最早,现在也很常见,一般是四位字母或者数字组成的,例如中国知网的注册页面就有类似的验证码,链接为:http://my.cnki.net/elibregister/commonRegister.aspx,页面如图 8-1 所示:图 8-1 知网注册页面表单的最后一项就是图形验证码,我们必须完全输入正确图中的字符才可以完成注册...

2019-08-07 22:37:36 163

转载 Python3网络爬虫实战-40、使用Selenium爬取淘宝商品

在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取。比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可能会包含加密密钥等,所以如果想自己构造Ajax参数,还是比较困难的。对于这种页面,最方便快捷的抓取方法就是通过Selenium。本节中,我们就用Selenium来模拟浏览器操作,抓取淘宝的商品信息,并...

2019-08-06 17:21:55 148

转载 Python3网络爬虫实战-39、Splash负载均衡配置

用Splash做页面抓取时,如果爬取的量非常大,任务非常多,用一个Splash服务来处理的话,未免压力太大了,此时可以考虑搭建一个负载均衡器来把压力分散到各个服务器上。这相当于多台机器多个服务共同参与任务的处理,可以减小单个Splash服务的压力。1. 配置Splash服务要搭建Splash负载均衡,首先要有多个Splash服务。假如这里在4台远程主机的8050端口上都开启了Splash服务,...

2019-08-06 17:21:02 111

转载 Python3网络爬虫实战-38、动态渲染页面抓取:Splash的使用

Splash 是一个 JavaScript 渲染服务,是一个带有 HTTP API 的轻量级浏览器,同时它对接了 Python 中的 Twisted和 QT 库,利用它我们同样可以实现动态渲染页面的抓取。1. 功能介绍利用 Splash 我们可以实现如下功能:异步方式处理多个网页渲染过程获取渲染后的页面的源代码或截图通过关闭图片渲染或者使用 Adblock 规则来加快页面渲染速度可执...

2019-08-06 17:15:32 860

转载 Python3网络爬虫实战-37、动态渲染页面抓取:Selenium

在前面一章我们了解了 Ajax 的分析和抓取方式,这种页面其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax 我们仍然可以借助于 Requests 或 Urllib 来实现数据的抓取。不过 JavaScript 动态渲染的页面不止 Ajax 这一种。比如中国青年网:http://news.youth.cn/gn/,它的分页部分是由 JavaScript 生成的,并非...

2019-08-06 17:14:32 366

转载 Python3网络爬虫实战-36、分析Ajax爬取今日头条街拍美图

本节我们以今日头条为例来尝试通过分析 Ajax 请求来抓取网页数据的方法,我们这次要抓取的目标是今日头条的街拍美图,抓取完成之后将每组图片分文件夹下载到本地保存下来。1. 准备工作在本节开始之前请确保已经安装好了 Requests 库,如没有安装可以参考第一章的安装说明。2. 抓取分析在抓取之前我们首先要分析一下抓取的逻辑,首先打开今日头条的首页:http://www.toutiao.co...

2019-08-06 17:11:01 103

转载 Python3网络爬虫实战-35、Ajax数据爬取

有时候我们在用 Requests 抓取页面的时候,得到的结果可能和在浏览器中看到的是不一样的,在浏览器中可以看到正常显示的页面数据,但是使用 Requests 得到的结果并没有,这其中的原因是 Requests 获取的都是原始的 HTML 文档,而浏览器中的页面则是页面又经过 JavaScript 处理数据后生成的结果,这些数据的来源有多种,可能是通过 Ajax 加载的,可能是包含在了 HTML ...

2019-08-05 20:25:46 191

转载 Python3网络爬虫实战-34、数据存储:非关系型数据库存储:Redis

Redis 是一个基于内存的高效的键值型非关系型数据库,存取效率极高,而且支持多种存储数据结构,使用也非常简单,在本节我们介绍一下 Python 的 Redis 操作,主要介绍 RedisPy 这个库的用法。1. 准备工作在本节开始之前请确保已经安装好了 Redis 及 RedisPy库,如果要做数据导入导出操作的话还需要安装 RedisDump,如没有安装可以参考第一章的安装说明。2. R...

2019-08-05 20:24:33 119

转载 Python3网络爬虫实战-33、数据存储:非关系型数据库存储:MongoDB

NoSQL,全称 Not Only SQL,意为不仅仅是 SQL,泛指非关系型的数据库。NoSQL 是基于键值对的,而且不需要经过 SQL 层的解析,数据之间没有耦合性,性能非常高。非关系型数据库又可以细分如下:键值存储数据库,代表有 Redis, Voldemort, Oracle BDB 等。列存储数据库,代表有 Cassandra, HBase, Riak 等。文档型数据库,代表有...

2019-08-05 20:23:25 120

转载 Python3网络爬虫实战-32、数据存储:关系型数据库存储:MySQL

关系型数据库基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作是某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系,多个表组成一个数据库,也就是关系型数据库。关系型数据库有多种,如 SQLite、MySQL、Oracle、SQL Server、DB2等等。在本节我们主要...

2019-08-05 20:22:18 137

转载 Python3网络爬虫实战-31、数据存储:文件存储

我们用解析器解析出数据之后,接下来的一步就是对数据进行存储了,保存的形式可以多种多样,最简单的形式可以直接保存为文本文件,如 TXT、Json、CSV 等等,另外还可以保存到数据库中,如关系型数据库 MySQL,非关系型数据库 MongoDB、Redis 等等。那么本章我们就来统一了解一下数据的保存方式。文本存储文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 J...

2019-08-05 20:20:15 284

转载 Python3网络爬虫实战-30、PyQuery

在上一节我们介绍了 BeautifulSoup 的使用,它是一个非常强大的网页解析库,可有没有觉得它的一些方法使用有点不适应?有没有觉得它的 CSS 选择器功能没有那么强大?如果你对 Web 有所涉及,如果你比较喜欢用 CSS 选择器,如果你对 jQuery 有所了解,那么这里有一个更适合你的解析库—— PyQuery。接下来我们就来感受一下 PyQuery 的强大之处。1. 准备工作在开...

2019-08-04 17:16:59 87

转载 Python3网络爬虫实战-29、解析库的使用:BeautifulSoup

前面我们介绍了正则表达式的相关用法,但是一旦正则写的有问题,可能得到的就不是我们想要的结果了,而且对于一个网页来说,都有一定的特殊的结构和层级关系,而且很多节点都有id或class来对作区分,所以我们借助于它们的结构和属性来提取不也是可以的吗?所以,这一节我们就介绍一个强大的解析工具,叫做 BeautiSoup,它就是借助网页的结构和属性等特性来解析网页的工具,有了它我们不用再去写一些复杂的正则...

2019-08-04 17:16:37 142

转载 Python3网络爬虫实战-28、解析库的使用:XPath

上一节我们实现了一个最基本的爬虫,但提取页面信息时我们使用的是正则表达式,用过之后我们会发现构造一个正则表达式还是比较的繁琐的,而且万一有一点地方写错了就可能会导致匹配失败,所以使用正则来提取页面信息多多少少还是有些不方便的。对于网页的节点来说,它可以定义 id、class 或其他的属性,而且节点之间还具有层次关系,在网页中可以通过 XPath 或 CSS 选择器来定位一个或多个节点。那么在页面...

2019-08-04 17:16:17 115

转载 Python3网络爬虫实战-27、Requests与正则表达式抓取猫眼电影排行

本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HTML 的解析库不是很了解,所以本节我们选用正则表达式来作为解析工具。1. 本节目标本节我们要提取出猫眼电影 TOP100 榜的电影名称、时间、评分、图片等信息,提取的站点 URL 为:http:/...

2019-08-04 17:15:48 437

转载 Python3网络爬虫实战-26、正则表达式

本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。当然对于爬虫来说,有了它,我们从 HTML 里面提取我们想要的信息就非常方便了。1. 实例引入说了这么多,可能我们对它到底是个什么还是比较模糊,下面我们就用几个实例来感受一下正则表达式的用法。我们打开开源中国提供的正则表达式测试工具:http://...

2019-08-04 17:15:07 149

转载 Python3网络爬虫实战-25、requests:高级用法

在前面一节我们了解了 Requests 的基本用法,如基本的 GET、POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。1. 文件上传我们知道 Reqeuests 可以模拟提交一些数据,假如有的网站需要我们上传文件,我们同样可以利用它来上传,实现非常简单,实例如下:import reques...

2019-08-03 16:39:20 133

转载 Python3网络爬虫实战-24、requests:基本使用

在前面一节我们了解了 Urllib 的基本用法,但是其中确实有不方便的地方。比如处理网页验证、处理 Cookies 等等,需要写 Opener、Handler 来进行处理。为了更加方便地实现这些操作,在这里就有了更为强大的库 Requests,有了它,Cookies、登录验证、代理设置等等的操作都不是事儿。那么接下来就让我们来领略一下它的强大之处吧。1 基本使用本节我们首先来了解下 Requ...

2019-08-03 16:38:41 263

转载 Python3网络爬虫实战-23、使用Urllib:分析Robots协议

利用 Urllib 的 robotparser 模块我们可以实现网站 Robots 协议的分析,本节我们来简单了解一下它的用法。1. Robots协议Robots 协议也被称作爬虫协议、机器人协议,它的全名叫做网络爬虫排除标准(Robots Exclusion Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。它通常是一个叫做 robots.txt 的文本文件,放在网...

2019-08-03 16:36:58 138

空空如也

空空如也

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

TA关注的人

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