1. 介绍
2. 环境
3. 获取标签之间内容
该部分主要是通过正则表达式获取两个标签之间的内容,通常这种标签都是成对出现的。
开始标签如:
<tr>、<th>、<td>、<a>、<table>、<div>...
后缀标签如:
</tr>、</th>、</td>、</a>、</table>、</div>...
核心代码:
res_tr = r'<tr>(.*?)</tr>'
m_tr = re.findall(res_tr,language,re.S|re.M)
例子:
[python] view plain copy
# coding=utf-8
import re
language = '''''<tr><th>性別:</th><td>男</td></tr><tr>'''
#正则表达式获取<tr></tr>之间内容
res_tr = r'<tr>(.*?)</tr>'
m_tr = re.findall(res_tr,language,re.S|re.M)
for line in m_tr:
print line
#获取表格第一列th 属性
res_th = r'<th>(.*?)</th>'
m_th = re.findall(res_th,line,re.S|re.M)
for mm in m_th:
print unicode(mm,'utf-8'), #unicode防止乱
#获取表格第二列td 属性值
res_td = r'<td>(.*?)</td>'
m_td = re.findall(res_td,line,re.S|re.M)
for nn in m_td:
print unicode(nn,'utf-8')
# 输出如下所示:
[python] view plain copy
>>>
<th>性別:</th><td>男</td>
性別: 男
>>>
python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。
findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]): 搜索string,以列表形式返回全部能匹配的子串。其中RE的常见参数包括:
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法)
re.M(re.MULTILINE): 多行模式,改变’^’和’$’的行为
re.S(re.DOTALL): 点任意匹配模式,改变’.’的行为
4. 网页解析的原则
4.1. 第一个原则:首先判断网页信息有没有完整的被拉下来
- 一般来说,如果statusCode = 200就代表网页被拉下来了。
- 但是有时候拉下来的网页是残缺不全的。
- 比如说:一个论坛的网页,我们首先提取页码的信息,来判断网页有没有被完整的拉下来
4.2 第二个原则:拉下来的网页和网页源代码是两回事。
- 网页源代码:审查元素Elements
- request拉下来的网页:Network ——> Preview