在使用爬虫提取网页中的部分信息时,采用到了re.compile()re.findall()两种方法,目的:把网页中的“某某城市土地规划表”截取并打印出来.

网页中的代码:

 <span class='tab-details'>某某城市土地规划表</span>

提取的方法:

def parse_response(html):pattern = re.compile('class=\'tab-details\'>(.*?)</span>',re.S)items = re.findall(pattern,html)  print(items)return items

结果:

['某某城市土地规划表']

这里主要讲解patternre.compile()re.findall()的定义及用法:

1.pattern :pattern 属性规定用于验证输入字段的正则表达式。

2.re.compile():compile() 方法用于在脚本执行过程中编译正则表达式,也可用于改变和重新编译正则表达式。

举例:在字符串中全局搜索 "man",并用 "person" 替换。然后通过 compile() 方法,改变正则表达式,用 "person" 替换 "man" 或 "woman",:

<script type="text/javascript">
var str="Every man in the world! Every woman on earth!";patt=/man/g;
str2=str.replace(patt,"person");
//用person取代man
document.write(str2+"<br />");patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt,"person");
//用person取代man或者woman
document.write(str2);</script>

 输出:(可见第一行中的man都被person取代,出现了woperson,第二行的的man和woman也被person取代,只有person,没有其他奇奇怪怪的字符串)

Every person in the world! Every woperson on earth!
Every person in the world! Every person on earth!

3.re.findall():额,这个最难搞,主要是为了讲解(.*?)

re.findall()函数是返回某种形式(比如String)中所有与pattern匹配的全部字符串,返回形式为数组。

下面是findall()函数的两种表示形式:(上面的代码采取的便是第二种形式):

import re
kk = re.compile(r'\d+')
kk.findall('one1two2three3four4')
#[1,2,3,4]#注意此处findall()的用法,可传两个参数;
kk = re.compile(r'\d+')
re.findall(kk,"one123")
#[1,2,3]

下面的是常用的正则表达式:

import restr = 'aabbabaabbaa'# 一个"."就是匹配除 \n (换行符)以外的任意一个字符
print(re.findall(r'a.b',str))#['aab', 'aab']# *前面的字符出现0次或以上
print(re.findall(r'a*b',str))#['aab', 'b', 'ab', 'aab', 'b']# 贪婪,匹配从.*前面为开始到后面为结束的所有内容
print(re.findall(r'a.*b',str))#['aabbabaabb']# 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']# 非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
print(re.findall(r'a(.*?)b',str))#['a', '', 'a']str = '''aabbabaabbaabb'''     #后面多加了2个b# 没有把最后一个换行的aab算进来
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']# re.S不会对\n进行中断
print(re.findall(r'a.*?b',str,re.S))#['aab', 'ab', 'aab', 'aa\n         b']

注意'.*?'是对它的前后部分作为开始结束部分进行截取,而'(.*?)'也是把其前后作为开始结束,但是只截取括号部分,不包含开始结束部分!!!(同时在对前后部分的选择时要注意特征明确点,就是与众不同的的嘛,防止截取出的是其他部分啊)

re.findall中参数re.S的意义:

1.字符串变为(后面多加了2个b)

str = '''aabbabaabbaabb'''

2.参数无re.S,没有把最后一个换行的aab算进来

print(re.findall(r'a.*?b',str))
#['aab', 'ab', 'aab']

3.参数有re.S,不会对\n进行中断

print(re.findall(r'a.*?b',str,re.S))
#['aab', 'ab', 'aab', 'aa\n         b']

在我们一开始的代码中就有re.s,因为在爬取网页的内容时是按照一个一个块的来爬取,可以理解为并列部分,会存在/n分行符

def parse_response(html):pattern = re.compile('class=\'tab-details\'>(.*?)</span>',re.S)items = re.findall(pattern,html)  print(items)return items

参考:

1.HTML input pattern 属性 | 菜鸟教程 (runoob.com)

2.(10条消息) Pattern用法(正则表达式)_woniu317的博客-CSDN博客_pattern

3.JavaScript compile() 方法 (w3school.com.cn)

4.Python 正则表达re模块之findall()详解 - 知乎 (zhihu.com)

Python 之正则表达re.compile()与re.findall()详解相关推荐

  1. Python函数(函数定义、函数调用)用法详解

    函数 函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码. 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码.函数还可以接 ...

  2. python代码案例详解-我用Python抓取了7000 多本电子书案例详解

    安装 安装很简单,只要执行: pip install requests-html 就可以了. 分析页面结构 通过浏览器审查元素可以发现这个电子书网站是用 WordPress 搭建的,首页列表元素很简单 ...

  3. python 命令-python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...

  4. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  5. python处理excel大数据-Python实现大数据收集至excel的思路详解

    一.在工程目录中新建一个excel文件 二.使用python脚本程序将目标excel文件中的列头写入,本文省略该部分的code展示,可自行网上查询 三.以下code内容为:实现从接口获取到的数据值写入 ...

  6. python怎么读文件夹下的文件夹-python如何获取当前文件夹下所有文件名详解

    前言 本文主要给大家介绍了关于python获取当前文件夹下所有文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 os 模块下有两个函数: os.walk() os.li ...

  7. pythondifflib详解_用python标准库difflib比较两份文件的异同详解

    [需求背景] 有时候我们要对比两份配置文件是不是一样,或者比较两个文本是否异样,可以使用linux命令行工具diff a_file b_file,但是输出的结果读起来不是很友好.这时候使用python ...

  8. python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析

    #2018-04-06 13:52:30 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘课程]二十一.朴素贝叶斯分类器详解及中文文本舆 ...

  9. python数据挖掘笔记】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取

    #2018-04-06 07:57:00 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘笔记]二十.KNN最近邻分类算法分析详解及平衡 ...

最新文章

  1. qtablewidget限制输入类型_对敏感型电子信号输入实施过压保护的可靠新方法
  2. 热电偶单片机代码c语言,基于STC12C5A60S2单片机的恒温箱设计-LCD1602-热电偶(电路图+程序源码)...
  3. SSH与EJB 比较
  4. 使用C语言在windows下一口气打开一批网页
  5. CIO,你想做一辈子“消防员”吗?
  6. MySQL(11)-----多表创建及描述表关系(多对多的分析和实现)
  7. apache maven安装教程
  8. 微信公众号运营技巧总结
  9. 发卡机构(POS收单行)代码表
  10. 时空图卷积网络:一种用于交通预测的深度学习框架
  11. 流行前端几大UI框架排行榜
  12. CCF CSP 201903-1 小中大
  13. 01 基本句型 + 补语
  14. 计算长方体、四棱锥的表面积和体积(Java)
  15. Arduino C语言 240*240 TFT 显示屏绘制表盘手把手教学,粗暴易懂
  16. 用python画好看的图片,几张好看的HTML图片和利用Python画的好看的图
  17. 使用谷歌Colab(Colaboratory)免费GPU训练自己的模型及谷歌网盘无限容量(Google drive)申请教程
  18. 超低功耗MCU 的网站
  19. 腾讯招聘总监:腾讯内推的思考与实践|好文推荐
  20. webrtc janus服务器部署在公网,coturn转发媒体流

热门文章

  1. tail命令 – 查看文件尾部内容
  2. 如何发现Synaptics病毒
  3. 语音识别基本原理学习
  4. 计算机中的原码,计算机中的原码反码补码移码
  5. 多任务学习MTL-MMOE
  6. 服务器返回状态码说明
  7. 面试问接口如何测试?
  8. linux grep gz文件内容,如何查询targz的压缩包文件的内容
  9. 5.8 拉普拉斯算子和拉普拉斯矩阵,图拉普拉斯算子推导
  10. 机器学习python中train_test_split()函数进行数据集分割