网络爬虫实战知识准备:

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)的更多相关文章

  1. The website is API(2)

    一.Beautifu Soup库 from bs4 import BeautifulSoup soup = BeautifulSoup(demo,"html.parser") Ta ...

  2. The website is API(1)

    Requests 自动爬取HTML页面 自动网路请求提交 robots 网络爬虫排除标准 Beautiful Soup 解析HTML页面 实战 Re 正则表达式详解提取页面关键信息 Scrapy*框架 ...

  3. The website is API(4)

    1.淘宝商品信息定向爬虫 目标:获取淘宝搜索页面信息,提取其中的商品名称和价格 理解:淘宝的搜索接口 翻页的处理 技术路线:requests+re https://s.taobao.com/searc ...

  4. 我这么玩Web Api(二):数据验证,全局数据验证与单元测试

    目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解 ...

  5. [Android]使用Dagger 2依赖注入 - API(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...

  6. [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...

  7. ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...

  8. ASP.NET Web API(二):安全验证之使用HTTP基本认证

    在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求 ...

  9. 微信公众平台Js API(WeixinApi)

    微信公众平台Js API(WeixinApi): https://github.com/zxlie/WeixinApi#user-content-3%E9%9A%90%E8%97%8F%E5%BA%9 ...

随机推荐

  1. Spring学习(三)——@PropertySource,@ImportResource,@Bean注解

    @PropertySource注解是将配置文件中 的值赋值给POJO 项目结构如下 一.创建一个Person.Java文件: import org.springframework.boot.conte ...

  2. 吴裕雄--天生自然TensorFlow2教程:张量排序

    import tensorflow as tf a = tf.random.shuffle(tf.range(5)) a tf.sort(a, direction='DESCENDING') # 返回 ...

  3. hive的join优化

    “国际大学生节”又称“世界大学生节”.“世界学生日”.“国际学生日”.1946年,世界各国学生代表于布拉格召开全世界学生大会,宣布把每年的11月17日定为“世界大学生节”,以加强全世界大学生的团结和友 ...

  4. 一个例子搞清楚Java程序执行顺序

    当我们new一个GirlFriend时,我们都做了什么? 一个例子搞懂Java程序运行顺序 public class Girl { Person person = new Person("G ...

  5. HDU - 1068 Girls and Boys(二分匹配---最大独立集)

    题意:给出每个学生的标号及与其有缘分成为情侣的人的标号,求一个最大集合,集合中任意两个人都没有缘分成为情侣. 分析: 1.若两人有缘分,则可以连一条边,本题是求一个最大集合,集合中任意两点都不相连,即 ...

  6. LINUX文件目录存放文件说明

    /bin bin是Binary的缩写.这个目录存放着最经常使用的命令. /boot这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件. /dev dev是Device(设备) ...

  7. UML-架构分析-架构原则

    1.高内聚 2.低耦合 3.防止变异(间接性等) 4.关注点分离 方法1: 事物模块化,封装到单独的子系统中 方法2: 装饰者模式 方法3: 面向方面(AOP)

  8. CAR-T|Single cell plan|Extracellular RNA|

    生物医疗大数据 安吉丽娜朱莉发现抑癌基因事件,BRCA突变与乳腺癌关联. 个体化测序商品23 and me 多组学数据研究:eg:太空和地球双胞胎发现生化指标差不多. 研究模式和工业模式相结合. 研究 ...

  9. Cookie的作用范围、设置、创建、获取的方法

    cookie的作用范围 同一浏览器,同一路径 默认情况下, 上级目录设置的cookie,下级目录可以获取到, 而下级目录设置的cookie,上级目录不能获取. 即:在一个页面设置cookie,那么这个 ...

  10. CVPR2019 | 超越Mask R-CNN!华科开源图像实例分割新方法MS R-CNN

    安妮 乾明 发自 凹非寺 本文转载自量子位(QbitAI) 实习生又立功了! 这一次,亮出好成绩的实习生来自地平线,是一名华中科技大学的硕士生. 他作为第一作者完成的研究Mask Scoring R- ...