The website is API(3)
网络爬虫实战知识准备:
Requests库、robots(网络爬虫排除标准)、BeautifulSoup库
一、Re正则表达式
1.
简洁地表达一组字符串
通用的字符串表达框架
字符串匹配
编译:
2.语法
字符+操作符
操作符
.:表示任何单个字符
[]:字符集,对单个字符给出取值范围
[^]:非字符集,对单个字符给出排除范围
*:前一个字符0次或无限次扩展
+:前一个字符1次或无限次扩展
?:前一个字符0次或1次扩展
|:左右表达式任意一个
{m}:扩展前一个字符m次
{m,n}:扩展前一个字符m至n次(含n)
^:匹配字符串开头
$:匹配字符串结尾
():分组标记,内部只能用|操作符
\d:数字,等价于[0-9]
\w:单词字符串,等价于[A-Za-z0-9_]
经典正则表达式实例
^[A-Za-z]+$ 由26个字母组成的字符串
^[A-Za-z0-9]+$ 由26个字母和数字组成的字符串
^-?\d+$ 整数形式的字符串
^[0-9]*[1-9][0-9]*$ 正整数形式的字符串
[\u4e00-\u9fa5] 匹配中文字符串
3.Re库介绍
re.search(pattern,string,flags=0):在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
flags控制标记
re.I 忽略正则表达式的大小写
re.M 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始
re.S 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符
>>> import re
>>> match = re.search(r'[1-9]\d{5}','BIT 100081')
>>> if match:
print(match.group(0)) 100081
re.match(pattern,string,flags):从一个字符串的开始位置起匹配正则表达式,返回match对象
>>> match = re.match(r'[1-9]\d{5}','BIT 100081')
>>> if match:
print(match.group(0))
>>> match.group(0)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
match.group(0)
AttributeError: 'NoneType' object has no attribute 'group'
>>> match = re.match(r'[1-9]\d{5}','100081')
>>> match.group(0)
'100081'
re.findall(pattern,string,flags):搜索字符串,以列表类型返回全部能匹配的子串
>>> ls = re.findall(r'[1-9]\d{5}','BIT100081 NPU100084')
>>> ls
['', '']
re.split(pattern,string,maxsplit=0,flags=0):将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
maxsplit:最大分割数
>>> re.split(r'[1-9]\d{5}','BIT100081 NPU100084')
['BIT', ' NPU', '']
>>> re.split(r'[1-9]\d{5}','BIT100081 NPU100084',maxsplit = 1)
['BIT', ' NPU100084']
re.finditer(pattern,string,flags):搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
>>> for m in re.finditer(r'[1-9]\d{5}','BIT100081 NPU100084'):
if m:
print(m.group(0))
100081
100084
re.sub(pattern,rel,string,count,flags):在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
repl:替换匹配字符串的字符串
count:匹配的次数
>>> re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 NPU100084')
'BIT:zipcode NPU:zipcode'
re.compile(pattern,flags)
regex = re.compile(r'[1-9]\d{5})
regex.search().......
这是面向对象的编译方法
4.Re库的match对象
属性:
.string 待匹配的文本
.re 匹配时使用的pattern对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos .....结束位置
方法:
.group(0) 获得匹配后的字符串
.start() 匹配字符串在原始字符串的开始位置
.end() 。。。。。结束位置
.span() 返回(.start(),.end())
>>> import re
>>> m = re.search(r'[1-9]\d{5}','NPU100081 NPU100084')
>>> m.string
'NPU100081 NPU100084'
>>> m.re
re.compile('[1-9]\\d{5}')
>>> m.pos
0
>>> m.end
<built-in method end of re.Match object at 0x03CEED40>
>>> m.endpos
19
>>> m.group(0)
''
>>> m.group(1)
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
m.group(1)
IndexError: no such group
>>> m.start()
3
>>> m.end()
9
>>> m.span()
(3, 9)
贪婪匹配:默认输出最长匹配
>>> match = re.search(r'PY.*N','PYANBNCNDN')
>>> match.group(0)
'PYANBNCNDN'
最小匹配
>>> match = re.search(r'PY.*?N','PYANBNCNDN')
>>> match.group(0)
'PYAN'
*?前一个字符0次或无限次扩展
+?前一个字符1次或无限次扩展
?? 前一个字符0次或1次扩展
{m,n}? 扩展前一个字符m至n次
>>> match = re.search(r'PY.+?N','PYANBNCNDN')
>>> match.group(0)
'PYAN'
The website is API(3)的更多相关文章
- The website is API(2)
一.Beautifu Soup库 from bs4 import BeautifulSoup soup = BeautifulSoup(demo,"html.parser") Ta ...
- The website is API(1)
Requests 自动爬取HTML页面 自动网路请求提交 robots 网络爬虫排除标准 Beautiful Soup 解析HTML页面 实战 Re 正则表达式详解提取页面关键信息 Scrapy*框架 ...
- The website is API(4)
1.淘宝商品信息定向爬虫 目标:获取淘宝搜索页面信息,提取其中的商品名称和价格 理解:淘宝的搜索接口 翻页的处理 技术路线:requests+re https://s.taobao.com/searc ...
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试 一.模型状态 - ModelState 我理解 ...
- [Android]使用Dagger 2依赖注入 - API(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...
- [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...
- ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...
- ASP.NET Web API(二):安全验证之使用HTTP基本认证
在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求 ...
- 微信公众平台Js API(WeixinApi)
微信公众平台Js API(WeixinApi): https://github.com/zxlie/WeixinApi#user-content-3%E9%9A%90%E8%97%8F%E5%BA%9 ...
随机推荐
- Swift - UISplitViewController
https://blog.csdn.net/weixin_43704791/article/details/86424080 2019年01月13日 AppDelegate中: func applic ...
- promise 核心 几个小问题
1.如何改变pending的壮体 抛出异常.pending变为rejected // throw new Error('fail') 内部抛出异常也这样 reason为抛出的error resol ...
- UVA - 10285 Longest Run on a Snowboard(最长的滑雪路径)(dp---记忆化搜索)
题意:在一个R*C(R, C<=100)的整数矩阵上找一条高度严格递减的最长路.起点任意,但每次只能沿着上下左右4个方向之一走一格,并且不能走出矩阵外.矩阵中的数均为0~100. 分析:dp[x ...
- 进度1_家庭记账本App
今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...
- Window NodeJs安装
1.下载NodeJs 官网下载地址:http://nodejs.cn/download/ 2.安装 双击,全程next安装. 安装完成,在cmd下面执行查看版本命令,命令如下 C:\Users\A ...
- Java固定资产管理系统 源码 jsp ssh
固定资产管理系统是对高校固定资产的一个信息化管理系统,基本功能包括:对固定资产的购进.接触.销毁,对物品的使用状态.借出状态.库存状态等进行标识,对各类物品进行编号,根据编号进行查询,根据名称进行查询 ...
- ES6 之 第七种数据类型Symbol
概述 为了减少对象的属性名冲突,ES6引入新的原始数据类型Symbol,JS的第七种数据类型. Symbol 能够保证每个属性的名字都是独一无二,这样就能从根本上防止属性名冲突. Symbol 值能够 ...
- 直击JDD | 共建智能新城 京东云让城市生活变得简单美好
技术快速革新,创新持续激发.在"智能+"时代,云计算.大数据.5G等新技术,已成为社会生产方式变革.创新人类生活空间的重要力量--11月19日,JDD-2019京东全球科技探索者大 ...
- centos系统将shell脚本改成systemctl启动的形式
说明: CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,就将程序存在系统服务里,即 ...
- c语言中%s和%d的区别
/************************************************************************* > File Name: ptr_both. ...