爬虫抓取百度贴吧帖子内容

上篇文章已经介绍了抓取糗事百科的段子,这篇文章来抓取百度贴吧帖子内容,涉及到urllib,urllib2,re等模块。

代码实现功能:

  1.获取某一个帖子的标题

  2.获取帖子回复的所有页数,以及每一页的内容

  3.可以只获取楼主的回复(使用数字1声明),或者所有回复(使用数字0声明)

直接使用oop编程的方式编写代码:

代码如下:

#!/usr/bin/env python
#coding:utf8

import urllib
import urllib2
import re

#处理页面标签类
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(object):
    #seeLZ: 0:查看所有回复 1:只看楼主回复
    def __init__(self, baseUrl, seeLZ):
        self.baseURL = baseUrl
        self.seeLZ = ‘?see_lz=‘ + str(seeLZ)
        self.tool = Tool()

    #获取帖子页面数内容
    def getPage(self, pageNum):
        try:
            url = self.baseURL + self.seeLZ + ‘&pn=‘ + str(pageNum)
            req = urllib2.Request(url)
            response = urllib2.urlopen(req)
            #print response.read()
            html = response.read().decode(‘utf-8‘)
            return html

        except urllib2.URLError,e:
            if hasattr(e, ‘reason‘):
                print u‘连接百度贴吧失效,错误原因:‘, e.reason
                return None
    #获取帖子标题
    def getTitle(self, pageNum):
        page = self.getPage(pageNum)
        pat1 = re.compile(r‘<h3 class="core_title_txt.*?>(.*?)</h3>‘, re.S)
        result = re.search(pat1, page)
        if result:
            print result.group(1)
        else:
            return None
    #获取帖子回复页数
    def getPageNum(self, pageNum):
        page = self.getPage(pageNum)
        pat1 = re.compile(r‘<li class="l_reply_num".*?</span>.*?<span.*?>(.*?)</span>‘, re.S)
        result = re.search(pat1, page)
        if result:
            print result.group(1)
            return int(result.group(1))
        else:
            return None
    #获取帖子回复内容
    def getContent(self, pageNum):
        page = self.getPage(pageNum)
        pat1 = re.compile(r‘<div id="post_content.*?>(.*?)</div>‘, re.S)
        items = re.findall(pat1, page)
        # for item in items:
        #     print item
        floor = 1
        for item in items:
            print ‘‘
            print ‘第%s页的帖子内容:‘ %pageNum
            print floor,u‘楼-----------------------‘
            print self.tool.replace(item)
            floor += 1

#调用执行主函数
if __name__ == ‘__main__‘:
    baseURL = ‘http://tieba.baidu.com/p/3138733512‘
    bdtb = BDTB(baseURL,0)
    bdtb.getTitle(1)
    page_num = bdtb.getPageNum(1)
    for i in xrange(page_num):
        bdtb.getContent(i+1)
时间: 2024-10-14 18:31:36

爬虫抓取百度贴吧帖子内容的相关文章

Python爬虫-爬取百度贴吧帖子

这次主要学习了替换各种标签,规范格式的方法.依然参考博主崔庆才的博客. 1.获取url 某一帖子:https://tieba.baidu.com/p/3138733512?see_lz=1&pn=1 其中https://tieba.baidu.com/p/3138733512?为基础部分,剩余的为参数部分. http://  代表资源传输使用http协议 tieba.baidu.com 是百度的二级域名,指向百度贴吧的服务器. /p/3138733512 是服务器某个资源,即这个帖子的地址定位符

Python-18:多线程扒取百度贴吧帖子内容源码

源码中附注释,直接放源码哈. #-*-coding:utf8-*- from lxml import etree from multiprocessing.dummy import Pool as ThreadPool import requests import json #这三行是用来解决编码问题的 import sys reload(sys) sys.setdefaultencoding('utf-8') '''重新运行之前请删除content.txt,因为文件操作使用追加方式,会导致内容

Python爬虫——抓取贴吧帖子

抓取百度贴吧帖子 按照这个学习教程,一步一步写出来,中间遇到很多的问题,一一列举 首先, 获得 标题 和 贴子总数 # -*- coding:utf-8 -*- #!/user/bin/python import urllib import urllib2 import re class BDTB: #初始化,传入基地址,是否只看楼主的参数 def __init__(self, baseUrl, seeLZ): self.baseURL = baseUrl self.seeLZ = '?see_

Python爬虫实战二之爬取百度贴吧帖子

大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不好使,八成是正则表达式那儿匹配不到了,请更改一下正则,当然最主要的还是帮助大家理解思路. 2016/12/2 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:ht

转 Python爬虫实战二之爬取百度贴吧帖子

静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件

【python学习】网络爬虫——爬百度贴吧帖子内容

很久以前,很喜欢泡贴吧,因为那里有自己牵挂的人和事 一转眼过去好多年了...... 一个简单的学习爬虫的例子,爬百度贴吧帖子内容 代码如下: # -*- coding:utf-8 -*- #import urllib import urllib2 import re #功能性类,过滤掉html标签的类 class Tool:     #去除img标签,7位长空格     removeImg = re.compile('<img.*?>| {7}|')     #删除超链接标签     remo

php爬虫抓取信息及反爬虫相关

58爬虫了百姓,赶集和58互爬,最后各种信息相同,都是爬虫后的数据库调用,潜规则啊,几家独大还暗中各种攻击,赶驴网的幽默事例我不想多评价.这个时代是砸.钱*养.钱的时代,各种姚晨杨幂葛优,各种地铁公车广告,各种卫视广告,铺天盖地~~~ 来谈php爬虫抓取信息~~ php爬虫首推Curl函数了,先来认识下它. 0x01.curl扩展的安装: 1.确保php子文件夹ext里面有php_curl.dll(一般都有的,一般配置时候会设置环境变量的) 2.将php.ini里面的;extension=php

[js高手之路]Node.js实现简易的爬虫-抓取博客所有文章列表信息

抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取博客所有的文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的http库 第三方库:cheerio,这个库就是用来处理dom节点的,他的用法几乎跟jquery用法一模一样,所以有了这个利器,写一个爬虫就非常简单 准备工作: 1,npm init --yes 初始化package.json 2,安装cheerio:npm install cheerio --sav

python 爬虫抓取心得

quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quote('要编码的字符串') query = urllib.quote(singername) url = 'http://music.baidu.com/search?key='+query response = urllib.urlopen(url) text = response.read()