下载天涯的文章

写了个下载天涯文章的Python脚本,有点乱,效率很低,单线程,用正则表达式拼起来的。

能简单的判断一些是不是作者与网友聊天的帖子,也会有失误,而且很多!!!!

有时候会卡死,我的解决办法是重新来一次……汗

# -*- coding: utf-8 -*-
import urllib
import urllib2
import re,os
 
def cn(s):
    return s.decode("utf-8").encode("gbk")
 
def getUrlContent(url):
    return urllib2.urlopen(url).read()
 
def getFirst(cont):
    p1 = re.findall('''<div class="bbs-content clearfix">(.+?)</div>''',cont,re.DOTALL)
    if len(p1)>0:
        return p1[0]
    else:
        return ""
 
def getNextPageUrl(cont):
    p1 = re.findall('''<a href="(.+?)" class="js-keyboard-next">下页</a>''',cont)
    if len(p1)>0:
        return "http://bbs.tianya.cn"+p1[0]
    else:
        return None
 
def getAuthor(cont):
    p1 = re.findall('''<meta name="author" content="(.+)">''',cont)
    if len(p1)>0:
        return p1[0]
     
def getTitle(cont):   
    p1 = re.findall('''<span class="s_title"><span style="font-weight:400;">(.+?)</span>''',cont)
    if len(p1)>0:
        return p1[0]
 
def getOnePage(cont,author,fp):
    t=""
    n=0
    #print cont
    p='''<div class="atl-item".+?uname="(.+?)">.+?<span>(时间.+?)</span>.+?<div class="bbs-content">(.+?)</div>'''
    p1 = re.findall(p,cont,re.S)
    #print p1
    if len(p1)>0:
        for t in p1:
            if t[0]==author:
                if re.findall("[^-]+?-----------------------------[^-]*?",t[2])==[] and len(t[2])>512:
                    fp.writelines("<hr/>%s<br/>%s"%(t[1],t[2]))
 
def main(url):
    n=0
    author=""
    print url
    cont=getUrlContent(url)
    if cont<0:return
    print 'open OK'
    author=getAuthor(cont)
    if author<0:
        print "url error"
        return
    title = getTitle(cont)
    if author<0:
        print "url error"
        return
    time=re.findall("<span>(时间:.+?)</span>",cont)[0]
    print 'title:',cn(title)
    print 'author:',cn(author)
    print 'time:',cn(time)
    while 1:
        if n>0:
            fn="%s[%d].htm"%(cn(title),n)
        else:
            fn="%s.htm"%cn(title)
        if os.path.isfile(fn):
            print "File %s already exists!"%fn
            n=n+1
        else:
            break
         
    fp=open(fn,'w')
    fp.writelines('''<html>
                    <head>
                    <meta charset="utf-8"/>
                    <title>%s</title>
                    </head>
                    <body>'''%(title))
    fp.writelines("【%s】<br/>【%s】\n<hr/>%s<br/>"%(title,author,time))
    fp.writelines(getFirst(cont))
    n=1
    while 1:
        print "page:%d"%n
        getOnePage(cont,author,fp)
        url=getNextPageUrl(cont)
        if url!=None:
            cont=getUrlContent(url)
            n=n+1
        else:
            break
    fp.writelines('''</body>
                    </html>
                    ''')
    fp.close()
    print "download ok"
 
if __name__ == '__main__':
    url=raw_input('input url:')
    main(url)

  

转载于:https://www.cnblogs.com/fwindpeak/p/3369383.html

Discuz插件功能 安装本Discuz插件之后,可以输入天涯论坛帖子的网址,一键获取天涯论坛帖子的主题内容和回贴数据到您的论坛上。 采集器开发经验 此插件集成了“智能云采集任何内容 众大云采集 8.1”和“一键采集贴吧内容 正式版 1.0”的所有开发经验,并在此基础上新增了很多功能和解决用户反馈的若干问题 本Discuz插件功能特点 1、可以批量生成真实的马甲用户数据作为发帖人和回帖人,感觉您的论坛人气很旺。 2、除了天涯论坛帖子的主题内容会采集之外,跟帖内容也会采集,感觉您的论坛内容丰富,有可读性。 3、马甲回帖的时间经过科学处理,不是所有回帖人都是同一个时间,感觉您的论坛不是马甲在回复,而是真实用户在回复。 4、批量生成的发帖和回帖马甲都是有真实的头像和昵称,由众大云采集的网络爬虫实时随机抓取生成。 5、批量生成的马甲用户可以导出uid列表,除了用在本插件之外也可以用在别的有需要的插件上。 6、采集过来的天涯论坛帖子内容的图片可以正常显示并且保存为帖子图片附件。 7、图片附件支持远程FTP保存。 8、图片会加上您论坛的水印。 9、每天会自动推送天涯论坛的高质量帖子过来,您只需点击一下鼠标就可以发布到您的论坛上。 10、已采集过的天涯论坛帖子内容不会重复二次采集,内容不会冗余。 11、采集发布的帖子跟真实用户发布的几乎一模一样。 12、无限量采集,不限采集次数。 此Discuz插件给您带来的价值 1、让您的论坛人气很旺,内容很丰富多彩。 2、批量生成的马甲除了用在本插件之外,还可以用在别外,相当于购买本插件,免费赠送了马甲生成插件。 3、用一键采集来代替手工发帖,省时省力,不易出错。 用户保障 1、严格遵守官方的插件开发规范,除此之外,我们的团队也会对插件进行大量的测试,确保插件的安全、稳定、成熟。 2、在使用过程中,发现有bug或者用户体验不佳,可以反馈给技术员,在经过评估之后,情况属实,将在下一次升级版本解决,请大家留意插件升级更新。 一键采集天涯论坛的任何帖子Discuz版页面展示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值