python爬虫网页解析中的疑难杂症...

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值