这学期的课涉及到处理网页信息,但是具体操作方法老师不在课上教,所以打算自己学一下python爬虫。先从正则表达开始吧。
正则表达模块里面的函数
- findall(): 这个函数的用法就是字面意思:找到所有匹配的对象。其返回值是一个列表,如果寻找的目标不存在,则返回一个空列表。输出返回值的方法是直接放在print里,或者赋值给一个变量。(我作为一个小白,遇到大神给出一个函数,但是没有具体用法时候,我就抓耳挠腮不晓得啷个用。所以自己的博客里会记录下具体用法)
import re
hand=open("jane.txt")#打开一个名为jane.txt的文件
handNew=""
for line in hand:
line=line.rstrip()#去掉每一行结尾的换行符
handNew=handNew+line
n=re.findall("paru",handNew)#赋值给变量
print(n)
print(re.findall("paru",handNew)) #直接print
findall()有一个特殊的用法:对数据的搜索与解析可同时进行。就是只留下()里的表达:
比如有如下文档jane.txt。现在我想提取x-开头的一列字符串里的浮点数,如果只用[0-9.+]来匹配,会找到文中4.90877。为了避免该情况,可以用
findall加括号
import re
hand=open("jane.txt")#打开一个名为jane.txt的文件
handNew=""
for line in hand:
line=line.rstrip()#去掉每一行结尾的换行符
handNew=handNew+line
n=re.findall("X-\S.+?: ([0-9.]+)",handNew) #加括号,留所要
print(n)
有括号和没括号的区别:
- compile(): 返回一个匹配对象,需要和findall(), match(), search()配合使用。返回结果:
re.compile('p.+\x08')
- finditer():返回一个iterator,迭代值。可以用for循环显示迭代值里的每一个对象。
接下来的match与search都是只匹配一个对象,返回对象及其位置,如果对象不存在则返回None。
-
match():匹配字符串的开头。如果开头不匹配,则返回none。例如对jane.txt文档,如果正则表达是“\Sa\S.+?”,则返回none。因为开头是On
-
search():在整个文档里搜索,返回第一个匹配对象
import re
hand=open("jane.txt")#打开一个名为jane.txt的文件
handNew=""
for line in hand:
line=line.rstrip()#去掉每一行结尾的换行符
handNew=handNew+line
n=re.search("\Sa\S.+?",handNew) #加括号,留所要
print(n)
》〉》〉》〉》〉》〉
= RESTART: /Users/cottoncandy/Desktop/cours_content/爹爹不要鼓励我玩物丧志啦/python爬虫/test.py
<re.Match object; span=(3, 7), match='sait'>
正则表达字符
python里面正则表达的字符和基本正则语言里的字符差不多。我只记录下我遇到的新的表达方式或者我不熟练的:
符号 | 含义 |
---|---|
\S | 匹配非空字符 |
\s | 匹配空字符 |
\B | 匹配非空字符串,不能用于单词首尾 |
\D | 匹配非数字字符 |
( ) | 括号内的在匹配时被忽略,!但在findall()里面相反! |