用py读取网页,并简单地解析html源码,遇到了一些问题,还希望各位能花些时间帮忙解答一下。
py版本是2.7,系统平台是win
比如cn.bing.com的网页,有<div id="sw_pb"></div>的部分。我想用正则获取到这部分。
- Python code
import re, urllib2 request = urllib2.urlopen('http://cn.bing.com/') html = request.read() p = re.compile('<div id="sw_pb">.*</div>') print p.match(html)
最后一行输出的结果是 None
后来想到可能是编码的问题,稍稍改写了下代码
- Python code
# -*- coding: utf-8 -*- import re, urllib2 request = urllib2.urlopen("http://cn.bing.com/") html = request.read() p = re.compile(unicode('<div id="sw_pb">.*</div>', 'utf-8').encode('utf-8')) print p.match(html)
结果还是 None,无匹配项
py用的不多,经验不足,不明白这种情况是为什么……还希望各位能解惑,谢谢。
------解决方案--------------------
翻翻文档先,看看match、search这两个函数有啥不同...
------解决方案--------------------
2楼的方法可以;楼主的问题在于应该用search,而不是match;
另外正则也稍微有点问题,应该用.*?而不是.*,否则贪婪匹配到最后一个</div>才结束。
p = re.compile('<div id="sw_pb">(.*?)</div>')
print p.search(html).group(1)