python爬虫小结1
先看正则化,正则化就是描述命令和字符切分、查找、筛选等功能的方便方式。
http://www.cnblogs.com/fnng/archive/2013/05/20/3089816.html
一个游戏:https://alf.nu/RegexGolf
先谈谈有何用?初步理解:
各种网页、latex等杂乱的文档,如何整理有用的东西呢?比如很乱的一个文档中,定位user_id,然后提取相关的信息。设想没有这个“工具”,我们会写个函数,依次的滑动指针做匹配,也稍微有些烦人啊!更加复杂地,要是匹配一个:数字+任意3字母+某个固定字母+可重复2~4次的小单元字母,怎么做呢?直接用自己写的字符串处理函数,想想就心理发麻,四肢无力。好吧,爬虫就是要做这么枯燥的字符串处理,怎么办呢?挨个挨个保存网页图片?终究不是好办法,以后要是还要做数据集可不得了,想想还是学学爬虫,做一劳永逸的事。
1.简单模式:做匹配
在linux中,也用过*做拷贝的事,蛮方便的,哈哈。好!我们也试试怎么表达上面深蓝色的任务。首先看看这些关键的特殊地字符:
.^$*+?{[]\|()
(1) . 表示任何东西,像linux里面的*
(2) ^ 求“非”该字符串 或者 匹配字符串的开头
(3) $ 匹配字符串的末尾
(4) * 重复0次以上
(5) +重复1次以上
(6) ? 好像是选择
(7) {m,n} 重复m到n次
(8) []某个字符的范围,可列举,也可以指明区间,如[abc],或[a-c]
(9) () 是分组,是希望其他的符号对整块起作用。(ab)*和ab*区别在于abab...,和abbb...
(10) | 是或
(11) \ 转义
(12) \d 任何十进制数,相当于[0-9]
(13) \D 任何非数字字符,相当于[^0-9]
(14) \s 任何空白字符,相当于[\t\n\r\f\v]
(15)\S 任何非空白字符,相当于[^\t\n\r\f\v]
(16)\w 任何字母数字字符,相当于[a-zA-Z0-9_]
(17)\W 反之
(18) \A 匹配句尾句首,无论是不是MULTILINE形式
(19) \Z 匹配句尾
(20) \b 单词边界。 只用以匹配单词的词首和词尾。单词被定义为一个字母数字序列,因此就是用空白符或者非字母数字符来标示。
(21)\B 则相反
2、使用正则表达式
实际中怎么用上面的东西呢?总得有个环境或者链接的“东西”告诉电脑,我表达的正则化的东西,不是一对乱数字啊。那直接写在python里面?str=xxx,还不行啊,只是个字符串,还没搞到正则化的“内核”\工具。好吧,答案是re 模块(包)来指明这一切的一切(小学喜欢写作文这么写,e.g., 他把自己一切的一切献给了祖国)。经过REs编译成为了“RegexObject”对象。对象可以有很多方法手段的哦。举个栗子:
import re
p = re.compile('ab*') #编译
print p #看看是什么鬼
<re.RegexObject instance at 80b4150>
再这里,先打个岔,转义符号的麻烦,我们知道要搞个\section的表达式(latex中最喜欢用\section来搞事情了。那么分析latex文档的小伙伴就要注意了),每当把“命令”当成字符串的时候就要加一个转义。第一次写成\\section作为字符串,以让第二个\保持。那如果把“命令+“\\section”当成字符串的时候,要削减两次,这时应该改成“命令+“\\\\section”,相当让人困惑。怎么办,早就有人注意到这个问题了。这样办:
ok,我们最后看看怎么执行匹配。这里,我们只看看最关键的几个方法:
(1) match()决定是否在字符串刚开始的位置匹配
(2) search()扫描字符串,找到这个RE匹配的位置
(3) findall() 找到RE匹配的所有子串,并把它们作为一个列表返回
(4) finditer() 找到RE匹配的所有子串,并把它们作为一个迭代器返回
match,search返回NONE如果没有匹配的话,反之返回Matchobject实例。查看实例相关,可以用这几个方法:
举个栗子:
栗子2:
栗子3:
栗子4:
有时候,不一定要先产生RegexObject对象,re模块提供顶级函数用match(), search(), sub()等等,可以将两步合成一步。这是RE字符串作为第一个参数,第二个则是相应RegexObject的方法参数相同。返回则要么是None要么就是一个MatchObject的实例。
编译标志:两种形式,一种是缩写,一种是字母
对于4,参考Page 13.
3. 更多模块功能
\b的栗子:
进一步地,看看r起的作用:
括号分组的栗子:
逆向引用没看到:
组:
命令组:?:
无捕捉组:?P<name>
界定符:
前向肯定界定符:(?=)
前向否定界定符:(?!)
4. 修改字符串
这里只是简单谈谈,不展开,因为现在还没用得上。(爬虫只要查找就行了吧?)
5. 常见问题
1)优化表达式
2)match()和search()
3)贪婪vs不贪婪:
python爬虫小结1的更多相关文章
- Python爬虫小结
有些数据是没有专门的数据集的,为了找到神经网络训练的数据,自然而然的想到了用爬虫的方法开始采集数据.一开始采用了网上的一个动态爬虫的代码,发现爬取的图片大多是重复的,有效图片很少. 动态爬虫: fro ...
- 【Python爬虫】爬虫利器 requests 库小结
requests库 Requests 是一个 Python 的 HTTP 客户端库. 支持许多 HTTP 特性,可以非常方便地进行网页请求.网页分析和处理网页资源,拥有许多强大的功能. 本文主要介绍 ...
- Python爬虫 股票数据爬取
前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://m ...
- Python字典小结
字典(dict)结构是Python中常用的数据结构,笔者结合自己的实际使用经验,对字典方面的相关知识做个小结,希望能对读者一些启发~ 创建字典 常见的字典创建方法就是先建立一个空字典,然后逐一 ...
- 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)
目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...
- 路飞学城Python爬虫课第一章笔记
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...
- Python爬虫视频教程
├─第1章_[第0周]网络爬虫之前奏 │ ├─第1节_"网络爬虫"课程内容导学 │ │ 第1部分_全课程内容导学.mp4 │ │ 第2部分_全课程内容导学(WS00单元)学习资料. ...
- Python爬虫之小试牛刀——使用Python抓取百度街景图像
之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...
- Python 爬虫入门实战
1. 前言 首先自我介绍一下,我是一个做 Java 的开发人员,从今年下半年开始,一直在各大技术博客网站发表自己的一些技术文章,差不多有几个月了,之前在 cnblog 博客园加了网站统计代码,看到每天 ...
随机推荐
- Cubieboard2安装Fedora20
几天前入手一块Cubieboard2,又买了张16G的TF卡,装个linux折腾折腾.以前都是在虚拟机上用linux,个人比较喜欢Fedora,因为总能用上最新版的软件,像支持C++11的GCC.Cl ...
- 打字机效果-so easy
html <p> <span>有了梦想,我们的心有了飞翔:有了飞翔,我们的梦想不再遥远......</span> </p> js $(function( ...
- HTML5学习的价值是什么?
随着互联网的发展和移动端的发展,很多公司对HTML5前端开发的需求旺盛,市场人才短缺供不应求. 对于HTML5的迅速发展和市场的大量需求,究竟为何HTML5如此受欢迎,它的价值在哪里呢? 语义特性(C ...
- React服务器端渲染值Next.js
昨天leader给分配了新任务,让熟悉一下ssr,刚开始有点懵,啥玩意?百度了一下,不就是服务器端渲染(server side render,简称: ssr). ssr简介 服务端渲染一个很常见的场景 ...
- 2746:约瑟夫问题poj
2746:约瑟夫问题 总时间限制: 1000ms 内存限制: 65536kB 描述 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退 ...
- 日志的艺术(The art of logging)
程序员学习每一门语言都是从打印“hello world”开始的,日志也是新手程序员学习.调试程序的一大利器.当项目上线之后,也会有各种各样的日志,比如记录用户的行为.服务器的状态.异常情况等等.打印日 ...
- java 之 组合模式(大话设计模式)
代码是一门艺术,每次看完大话设计模式后都会有新的认识,有时会感叹原来还可以这样玩,相信大家都用过递归,递归的使用一般遍历文件夹等会常用到, 今天讲的设计模式类似于递归,也比较神奇,先看下类图,稍后再帮 ...
- javascript设计模式——发布订阅模式
前面的话 发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模 ...
- oracle概念
.DDL 数据定义语言 create alter drop truncate .DML 数据操作语言 insert delete update select .TCL 事务控制语言 commit ro ...
- jmeter入门系列文章二 版本号介绍
转载时请标注源自:http://blog.csdn.net/musen518 jmeter版本号公布频率一般为1年,每年会有一个版本号升级 截止2015年底,最新版本号为2.13,最新最全的更新信息一 ...