一般来说当我们爬取网页的整个源代码后,是需要对网页进行解析的。
Python网页解析
正常的解析方法有三种
①:正则匹配解析
②:BeatuifulSoup解析
③:lxml解析
正则匹配解析:
在之前的学习中,我们学习过爬虫的基本用法,比如/s,/d,/w,*,+,?等用法,但是在对爬取到的网页进行解析的时候,仅仅会这些基础的用法,是不够用的,因此我们需要了解Python中正则匹配的经典函数。
re.match
runoob解释:re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match就会返回none,如果匹配成功,re.match就会返回一个匹配的对象,否则也为null.查看匹配返回的对象要使用group函数的方法。
语法:
re.match(pattern,string,flags=0)
解释:pattern是匹配的正则表达式,string是所要匹配的字符,而flags是标志位,用于匹配区分是否大小写,多行匹配等。具体用法如下列表格:
修饰符 | 描述 |
---|---|
re.I | 使得匹配对大小写不敏感 |
re.M | 多行匹配,影响^和$ |
re.S | 使得.匹配包括换行在内的所有字符(正常情况下.不匹配换行符,这个行为很危险,容易被黑客利用绕过) |
re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B |
代码案例:
#!/usr/bin/python
#coding:utf-8
import re
line="Anyone who dreams there gets"
match=re.match(r'(.*) dreams (.*?).*',line,re.M|re.I)
#match1=re.match(r'(.*) Dreams (.*?)',line,re.M)#大小写敏感,匹配会失败
match2=re.match(r'(.*) Dreams (.*?).*',line,re.M|re.I)#非贪婪模式
match3=re.match(r'(.*) Dreams (.*).*',line, re.M|re.I)#贪婪模式
print(match.group())
#print(match1.group())
print(match2.group())
print("match 0:",match.group(0))#Anyone who dreams there gets
print("match 1:",match.group(1))#Anyone