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,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‘) re.findall(pattern,flags):搜索字符串,以列表类型返回全部能匹配的子串 >>> ls = re.findall(r‘[1-9]d{5}‘,‘BIT100081 NPU100084‘) >>> ls [‘100081‘,‘100084‘] re.split(pattern,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,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,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) ‘100081‘ >>> m.group(1) Traceback (most recent call last): File "<pyshell#8>",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‘ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |