一、正则表达式

实际上爬虫一共就四个主要步骤:

  1. 明确目标(要知道你准备在哪个范围或者网站去搜索)
  2. 爬(将所有的网站内容全部爬下来)
  3. 取(去掉对我们没有用处的数据)
  4. 处理数据

我们在第上一篇文章中介绍的简单的“贴吧小爬虫”实际上省略了第3步,也就是“取”的步骤。因为我们down下了的数据是全部的网页,这些数据是很庞大并且混乱的,大部分的东西使我们不关心的,因此我们需要将之过滤出来。

那么对于文本的过滤或者规则的匹配,这里就有个学问,就是“正则表达式”

说道正则表达式很多人都头疼,确实,这个东西是学习精通并且应用熟练实属于一件蛋疼的事。

图片源于网络,侵删

但是作为一个工程师,要有一种思维,就是用到学到。用到3分要学4分,如果要用到7分,我们就要学到8分。

1.正则表达式基础

正则表达式是用于处理字符串的强大工具,并不是属于某种编程语言。

正则表达式拥有独立的处理引擎,不管是什么编程语言,正则表达式的语法都是一样的。

2.正则表达式匹配过程

  • 一次拿出表达式和文本中的字符比较
  • 如果每一个字符都能匹配,则匹配成功;一旦匹配不成功的字符则匹配失败
  • 如果表达式中有量词或边界,这个过程会稍微有一些不同
特殊构造(不作为分组)

3.数量词的贪婪模式与非贪婪模式

正则表达式通常用于文本中的查找匹配的字符串

贪婪模式,总是尝试匹配尽可能多的字符;

非贪婪模式则相反,总是尝试匹配尽可能少的字符

(Python里的数量词默认是贪婪的)

  • 例如:

正则表达式"ab*"如果用于查找"abbbc",将找到“abbb”。

而如果使用非贪婪的数量词“ab*?",将找到"a"

4.Python中如何使用正则表达式

Python中是通过一个叫“re”的包来支持正则表达式。

当然具体的“re”中的方法,可以在Python的命令行中

localhost:spider ldb$ python
Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more informati
on.
>>> import re
>>> help(re)

进行查看。

这里面我们知识做一个简单的正则匹配。

首先可以创建一个re_test.py文件

# -*- coding: utf-8 -*-#引入正则表达式re模块
import re#re
模块提供一个方法叫compile模块,提供我们输入一个匹配的规则
#然后返回一个pattern实例,供我们根据这个规则去匹配一些我们自定义的字符串
pattern = re.compile(r'd+.d*')result = pattern.findall("3.14158912312, 3.123123213, 232312, 3.15")
#findall 将返回全部匹配到的字符串列表给result
for item in result:print item

我们来详细的分析一下上面的代码,首先:

# -*- coding: utf-8 -*-

表示当前的Python文件的编码格式是"utf-8"

import re

re模块提供一个方法叫compile模块,提供我们输入一个匹配的规则

然后返回一个pattern实例,供我们根据这个规则去匹配一些我们自定义的字符串

pattern = re.compile(r'd+.d*)

这里我们传递的是'd+.*'表达式

  1. d 表示数字[0-9]
  2. + 表示重复出现上一次匹配的1次或n次
  3. . 表示字符’.’
  4. * 表示重复出现上一次匹配的0次或n次r 实际上是python告诉编译器这个字符串中的全部转义字符失效,按照原始字符串处理。

所以d+.d*实际上是表示匹配小树的规则

能够匹配到123.12312,1321.1等小数

但是匹配不到666,abc等非小数的字符串

由于我们已经简历好了一个能够匹配‘⧵d+.⧵d*’规则的partten对象。

通过partten的findall方法就能够匹配到我们得到的字符串。

返回的是一个匹配到字符串的列表 []

所以运行结果如下:

localhost:spider ldb$ python re_test.py
3.14158912312
3.123123213
3.15

findall(“3.14158912312, 3.123123213, 232312 , 3.15”)中的 232312 没有匹配

python正则表达式使用实例_正则表达式的基础知识,以及Python爬虫中的使用方法...相关推荐

  1. python交互界面实例_什么是“面向对象”程序设计-以Python为例

    面向对象的概念 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理 ...

  2. python交互界面实例_什么是“面向对象”程序设计以Python为例

    面向对象的概念 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理 ...

  3. java类的定义的实例_《Java基础知识》Java类的定义及其实例化

    类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public classDog { String name;intage;void ...

  4. python语言正确的标识符是__python基础知识:python的标识符和关键字

    本文适合编程语言零基础的初学者,有打算转行学习python的可以添加关注,后续小编将会把自己转行学pyhton语言以来的所有笔记,和工作中总结的一些开发经验分享给大家. 标识符 什么是标识符: 开发人 ...

  5. 零基础python入门书籍推荐书目_清华大学出版社-图书详情-《Python数据科学零基础一本通》...

    序 多次与教育界的朋友相聚,谈到计算机语言的发展趋势时,大家一致认为 Python 是 当今最重要的计算机语言.许多知名公司,例如 Google.Facebook 等皆已将 Python 列 为必备计 ...

  6. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

  7. Python基础笔记_Day01_计算机基础知识和Python开发环境搭建

    Day01_计算机基础知识和Python开发环境搭建 目录 01.01_计算机基础知识(计算机概述)(了解) 01.02_计算机基础知识(软件开发和计算机语言概述)(了解) 01.03_计算机基础知识 ...

  8. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

  9. CV:计算机视觉技术之图像基础知识—以python的cv2库来了解计算机视觉图像基础

    CV:计算机视觉技术之图像基础知识-以python的cv2库来了解计算机视觉图像基础 目录 一.图像中的傅里叶变换 1.时域和频域 2.傅里叶变换 3.图像中的傅里叶变换

最新文章

  1. 区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明
  2. 他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元丨开源...
  3. influxdb java spring_Spring boot使用influxDB总结
  4. 手机扫一扫,现实物体隔空「复制粘贴」进电脑!北大校友的AI新研究,现在变成AR酷炫应用...
  5. Python中经典类和新式类的区别
  6. 【已解决】tomcat报严重: Socket accept failed
  7. 帆软报表(finereport)使用Event 事件对象 (target)修改提示框样式
  8. [mybatis]映射文件_select_resultMap_关联查询
  9. 字符数组,字符串、数字转化
  10. 反汇编基础-数组和指针的反汇编代码分析
  11. firebase使用_如何开始使用Firebase Hosting
  12. 推荐JS插件:imagesLoaded,监测图片加载情况并提供相应的事件(加载成功/失败)...
  13. zabbix的boot.log占满根目录不能ssh连接No space left on device
  14. Hokuyo‘s first try
  15. qlabel显示图片同时鼠标点击画线_怎样将CAJ文档转成JPG图片?
  16. 常见反爬虫策略 及应对措施
  17. 求素数 java 101 200_Java求101~200之间的素数
  18. UVALive 4490 Help Bubu
  19. Gephi启动错误:Cannot load even default layout, using internally predefined
  20. ZFM_RFC_FIDOC-创建财务凭证-BAPI_ACC_DOCUMENT_CHECK/BAPI_ACC_DOCUMENT_POST/POSTING_INTERFACE_DOCUMENT

热门文章

  1. Linux Signals 进程信号简介
  2. hadoop中datanode无法启动,报Caused by: java.net.NoRouteToHostException: No route to host
  3. 【算法学习笔记】83.排序辅助 动态规划 SJTU OJ 1282 修路
  4. 代码艺术~优雅的编程字体及对字体的感觉
  5. go数组详解:数组的定义、遍历、使用细节、二维数组的定义及其遍历
  6. go gin gorm获取harbor项目,镜像,tag代码示例
  7. vue npm run serve/dev命令后台运行:nohup npm run serve >web.log 2>1 exit
  8. 【网址收藏】hexo博客主题收藏
  9. kafka生产者、消费者消息操作命令
  10. Ansible 介绍和架构、特性