晚上无事看到了自己在51cto的blog个人信息,于是准备用python试试把它们抓取出来显示到程序里,顺便练练手。对正则式不是很熟,所以字符串解析基本是用python的字符串操作函数库来完成的。
其实原理也很简单,就是从互联网下载博客首页到内存里(保存为文件再读取也是一样),然后查找到<div class="side_sinfo"> 这个字符串,我分析HTML文件得来的,从这个地方开始,一步一步的解析,最后结果就出来了。
照例看看预览,直接在控制台完成的:

以下是代码. python2.5下编译通过
#coding=gbk
import urllib,re
from urllib import urlopen
if __name__=="__main__":
blogUrl=raw_input('请输51cto的blog地址:')
#下载网页到内存
webdata = urlopen(blogUrl).read()
#标签特征开始位置
nPosStart = webdata.find('博客统计信息')
#标签特征结束位置
nPosEnd = webdata.find('注册日期:')
#分割内容,+24是为了补全部分html
userInfoStr = webdata[nPosStart:nPosEnd+24]
nPosStart2 = userInfoStr.find('用户名')
userInfoStr = userInfoStr[nPosStart2:nPosEnd+24]
#清除部分标签
userInfoStr = userInfoStr.replace('<div class="side_sinfo">','')
userInfoStr = userInfoStr.replace('<a href="http://51ctoblog.blog.51cto.com/26414/5591" target="_blank" style="text-decoration: underline;">','')
userInfoStr = userInfoStr.replace('</a>','')
#清除换行
userInfoStr = userInfoStr.replace('\n','')
#清除空格
userInfoStr = userInfoStr.replace(' ','')
#按<br>拆分信息
userInfoStr = userInfoStr.split('<br>')
print "博客个人信息查询:"
print "================="
#循环输出
for userInfo in userInfoStr:
print userInfo
修改了一下,支持在程序里反复查询
#coding=gbk
import urllib,re
from urllib import urlopen
def searchbloginfo(url):
#下载网页到内存
webdata = urlopen(blogUrl).read()
#标签特征开始位置
nPosStart = webdata.find('博客统计信息')
#标签特征结束位置
nPosEnd = webdata.find('注册日期:')
#分割内容,+24是为了补全部分html
userInfoStr = webdata[nPosStart:nPosEnd+24]
nPosStart2 = userInfoStr.find('用户名')
userInfoStr = userInfoStr[nPosStart2:nPosEnd+24]
#清除部分标签
userInfoStr = userInfoStr.replace('<div class="side_sinfo">','')
userInfoStr = userInfoStr.replace('<a href="http://51ctoblog.blog.51cto.com/26414/5591" target="_blank" style="text-decoration: underline;">','')
userInfoStr = userInfoStr.replace('</a>','')
#清除换行
userInfoStr = userInfoStr.replace('\n','')
#清除空格
userInfoStr = userInfoStr.replace(' ','')
#按<br>拆分信息
userInfoStr = userInfoStr.split('<br>')
print "博客个人信息查询:"
print "================="
#循环输出
for userInfo in userInfoStr:
print userInfo
if __name__=="__main__":
running = True
while running:
blogUrl = raw_input('请输51cto的blog地址--输入0结束程序:')
if cmp(blogUrl , '0') == 0:
running = False
else:
searchbloginfo(blogUrl)
[/img]..