免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2066 | 回复: 1
打印 上一主题 下一主题

学了一个礼拜python,写的读baidu空间日志的 例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-27 17:08 |只看该作者 |倒序浏览

马马虎虎学了一周
其实也没有一周
就是下班了
晚上回去看看书



#!/usr/bin/env python
# -*- coding: gbk -*-


import urllib, re

from sgmllib import SGMLParser

import sys
reload(sys)
sys.setdefaultencoding('gbk')

class URLLister(SGMLParser):
        def reset(self):
                SGMLParser.reset(self)
                self.urls = []

        def start_a(self, attrs):
                href = [v for k, v in attrs if k=='href']
                if href:
                        self.urls.extend(href)


       
       
homeurl ="http://hi.baidu.com/shenjianyz/blog"
urlbase = homeurl[:homeurl.rfind("/")]
urlbase = urlbase[:urlbase.rfind("/")]
       
usock = urllib.urlopen(homeurl)
fp = usock.read()
parser = URLLister()
parser.feed(fp)
         
usock.close()                     
parser.close()
fp = unicode(fp, "gbk")         

modpattern = '^/\S+.html$'
useurl = []           
for url in parser.urls:
        if re.search(modpattern, url) :
                useurl.append(url)


urlunique = [i for i in set(useurl)]

for i in urlunique:
        tilepattern = "<div class=\"tit\"><a href=\"" + i +"\" target=\"_blank\">(\S+)</a>"
   
       
        line = fp
        if len(line) == 0:
                break
        regline = line
        try:
                reg=re.search(tilepattern,regline).group(1)
        except AttributeError:
                continue

        file = open(reg+'.txt','w')
        linkusock = urllib.urlopen(urlbase+i)
        content = linkusock.read()
        content = unicode(content, "gbk")
       
        linkusock.close()
        contentpattern = "<div id=\"m_blog\" class=\"modbox\">((\S|\s)*)<div class=\"opt\">"
   
       
        contentline = content
       
        if len(contentline) == 0:
                break
        try:
                getcontent = re.search(contentpattern, contentline).group(1)
        except AttributeError:
                continue
               
        #content去掉html标签
        re_br = re.compile('<br\s*?/?>')#
        re_div = re.compile('</?\s*div\s*(class\s*=\s*\"\w+\"|id\s*=\s*\"\w+\"|\s)*>')#div标签
        re_h = re.compile('</?\w+[^>]*>')#HTML标签
        re_comment = re.compile('<!--[^>]*-->')#HTML注释
        re_td = re.compile('<\s*/?\s*td\s*>')
        re_nbsp = re.compile('&nbsp\s*;|&lt\s*;|&mdash\s*;')

        getcontent = re_br.sub('\n', getcontent)#将br转换为换行
        getcontent = re_div.sub(' ', getcontent)
        getcontent = re_h.sub(' ', getcontent)
        getcontent = re_comment.sub(' ', getcontent)
        getcontent = re_td.sub(' ', getcontent)
        getcontent = re_nbsp.sub(' ', getcontent)
        file.write(urlbase+i+'\n')
        file.write(getcontent)
        file.close()

论坛徽章:
0
2 [报告]
发表于 2009-05-27 17:13 |只看该作者
感谢分享,就是最后的替换html符部分有点乱,可以把几个sub写在一个正则里面去替换
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP