文档章节

Python实现获取百度贴吧主页的前十页回复数,帖子id,主题

鑢七花
 鑢七花
发布于 2016/11/17 15:57
字数 712
阅读 5
收藏 0
点赞 0
评论 0

                                                     Python实现获取百度贴吧主页的前十页回复数,帖子id,主题

#!/usr/bin/python
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
import sys
reload (sys)
sys.setdefaultencoding('utf-8')
 
#处理页面标签类
class Tool:
    #去除img标签,7位长空格
    removeImg = re.compile('<img.*?>| {7}|')
    #删除超链接标签
    removeAddr = re.compile('<a.*?>|</a>')
    #把换行的标签换为\n
    replaceLine = re.compile('<tr>|<div>|</div>|</p>')
    #将表格制表<td>替换为\t
    replaceTD= re.compile('<td>')
    #把段落开头换为\n加空两格
    replacePara = re.compile('<p.*?>')
    #将换行符或双换行符替换为\n
    replaceBR = re.compile('<br><br>|<br>')
    #将其余标签剔除
    removeExtraTag = re.compile('<.*?>')
    def replace(self,x):
        x = re.sub(self.removeImg,"",x)
        x = re.sub(self.removeAddr,"",x)
        x = re.sub(self.replaceLine,"\n",x)
        x = re.sub(self.replaceTD,"\t",x)
        x = re.sub(self.replacePara,"\n    ",x)
        x = re.sub(self.replaceBR,"\n",x)
        x = re.sub(self.removeExtraTag,"",x)
        #strip()将前后多余内容删除
        return x.strip()
        
#百度贴吧爬虫类
class BDTB:

    def __init__(self,baseUrl):
        self.baseURL = baseUrl
        self.tool = Tool()
        self.floor = 1
        self.file = None
        
    #传入贴吧主页网址,获取贴吧主页的代码
    def getPage(self,pageNum):
        try:
            url = self.baseURL + '&pn=' + str(pageNum)
            request = urllib2.Request(url)
            response = urllib2.urlopen(request)
            #print response.read()
            return response.read().decode('utf-8')
        except urllib2.URLError, e:
            if hasattr(e,"reason"):
                print u"连接百度贴吧失败,错误原因",e.reason
                return None
                
    #传入主页代码,获取帖子
    def getTitle(self,page):
        pattern = re.compile(r'<a href="/p/.*? title="(.*?)" .*? class="j_th_tit .*?>(.*?)</a>',re.S)
        result = re.findall(pattern,page)
        gettitles = []
        for item in result:            
            gettitle = "\n"+"标题:"+self.tool.replace(item[1])+"\n"
            gettitles.append(gettitle.encode('utf-8'))
        return gettitles

    #传入主页页码,获取帖子回复数
    def getReplay(self,page):
        pattern = re.compile(r'<span class="threadlist_rep_num center_text.*?>(.*?)</span>',re.S)
        result = re.findall(pattern,page)
        getreplays = []
        #print result
        for item in result:
            #print self.tool.replace(getreplay)
            getreplay = "\n"+"回复数:"+self.tool.replace(item)+"\n"
            getreplays.append(getreplay.encode('utf-8'))            
        #print getreplays
        return getreplays
        

    #传入主页页码,获取帖子作者
    #def getAuthor(self):
        #page = self.getPage()
        #pattern = re.compile(r'<a data-field=\'.*? class="frs-author-name.*? >(.*?)</a>',re.S)
        #result = re.findall(pattern,page)
        #for item in result:
            #print item
    
    #传入主页代码,获取帖子id
    def getId(self,page):
        pattern = re.compile(r'<a href="/p/(.*?)" title=".*?" class="j_th_tit .*?>.*?</a>',re.S)
        result = re.findall(pattern,page)
        getids = []
        #print result
        for item in result:
            #print self.tool.replace(getid)
            getid = "\n"+"帖子id:"+self.tool.replace(item)+"\n"
            getids.append(getid.encode('utf-8'))
        #print getids
        return getids            

    def writeDate(self,getreplays,getids,gettitles):
        reload(sys)
        sys.setdefaultencoding('utf-8')
        for (item, a, b) in zip(getreplays,getids,gettitles):
            self.file.write(item)
            self.file.write(a)
            self.file.write(b)
            c = "------------------------------------------------------------------------"
            self.file.write(c)  
            self.floor += 1
    def start(self,title):
        indexPage = self.getPage(0)
        gettitle = self.getTitle(indexPage)
        self.file = open(title + ".txt","a+")            
        print "写入文件名称成功!"
        if indexPage == None:
            print "URL已失效,请重试"
            return
        try:
            print "获取贴吧前十页帖子"
            for i in range(0,10):
                print "正在写入第" + str(i) + "页数据"
                page = self.getPage(i*50)
                getreplays = self.getReplay(page)
                getids = self.getId(page)
                gettitles = self.getTitle(page)
                self.writeDate(getreplays,getids,gettitles)
        except IOError,e:
            print "写入异常,原因" + e.message
        finally:
            print "写入任务完成"
            
        
print u"请输入贴吧名:"
baseURL = 'http://tieba.baidu.com/f?kw=' + raw_input(u'') + '&fr=ala0&tpl=5'
print u"请再一次输入贴吧名称" #输入的名称为保存数据的txt文件名称
title = raw_input(u'')
#title = "贴吧主页"
bdtb = BDTB(baseURL)
bdtb.start(title)

格式粘贴时有问题,直接拷贝可能会有问题,请注意。

© 著作权归作者所有

共有 人打赏支持
鑢七花
粉丝 5
博文 7
码字总数 17605
作品 0
葫芦岛
运维
Python实现贴吧多线程网盘爬虫

大多数Python学习者都是冲着Python在爬虫领域有非常出色的表现才开始学习的,在学好Python的基本语法并会使用re、requests、BeautifulSoup4等模块后,很快就能写出一个简单的爬虫小程序(不要...

数据取经团 ⋅ 2017/11/29 ⋅ 0

在技术圈儿混,怎能不关注这几个公众号!

精品公众号订阅,总有几个适合你 AIOps智能运维 ID:AI_Ops ▲长按图片识别二维码关注 百度云智能运维团队官方公众号!我们利用大规模分布式、大数据和机器学习等技术为百度云用户和百度各产...

g2v13ah ⋅ 03/30 ⋅ 0

ThinkOX 1.1.0 发布,新增资讯模块、同步登陆绑定站内账号等

如果出现升级提示,请关闭浏览器重新打开即可安装。 产品主页:tox.ourstu.com 版本号 1.1.0 包含了大量改进。 授权用户请联系我们升级至最新版(必须升级至1.1.0版才能使用手机客户端)。 ...

陈一枭 ⋅ 2014/08/27 ⋅ 7

python3 爬虫实战之爬取网易新闻APP端

(一)使用工具 这里使用了火狐浏览器的user-agent插件,不懂的可以点这里火狐插件使用 (二)爬虫操作步骤: 百度 网易新闻并选择 步骤一: 步骤二: 步骤三: 步骤四: 最后一步: 注意点:...

徐代龙 ⋅ 05/24 ⋅ 0

如何让自己成长为 IT 项目管理者

在这个快节奏发展的时代,你需要用最有效的方式,学习最有用的知识。技但碎片化的信息那么多,如何选择呢?推荐几个程序员自我提升必备的公众号,快关注、使用起来吧! TGO鲲鹏会ID:tgo-kun...

bf02jgtrs00xktcx ⋅ 04/18 ⋅ 0

python—爬虫

1.1 介绍 通过过滤和分析HTML代码,实现对文件、图片等资源的获取,一般用到: urllib和urllib2模块 正则表达式(re模块) requests模块 Scrapy框架 urllib库: 1)获取web页面 2)在远程htt...

huangzp168 ⋅ 01/12 ⋅ 0

分享一个神器,Selenium 自动化测试工具

最近写项目的时候,用到了Selenium,一个 Web 端的自动化测试工具,直接运行在浏览器中,用来模拟用户操作。 Selenium 不仅仅可以用作自动化测试,还有很多种玩法,比如 Python 的爬虫,实现...

angkee ⋅ 05/31 ⋅ 0

人脸检测(dlib和opencv)

mark一下,感谢作者分享! https://zhuanlan.zhihu.com/p/32781218 $ sudo apt-get install libgtk-3-dev $ sudo apt-get install libboost-all-dev $ pip install scipy $ pip install open......

weixin_38569817 ⋅ 05/30 ⋅ 0

万方数据库,文献下载的准备,文献信息收集

想批量下载万方数据库的文献,看了一下其html源码不好玩啊. 其一篇文献的下载的链接. 下 载 onclick 事件 onclick 事件会在对象被点击时发生。 请注意, oncli...

东风冷雪 ⋅ 05/23 ⋅ 0

关注这些技术号,你将拥有半个互联网圈

“ IT 行业技术变更周期越来越快,作为技术人最重要的是持续学习,现在的学习途径有很多,我们到底该如何做出选择? 我觉得最重要有两方面:第一,需要保持良好的技术视野,持续关注行业内技...

g6u8w7p06dco99fq3 ⋅ 04/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部