【爬虫】BeautifulSoup之爬取百度贴吧的帖子

在网上看到爬百度贴吧的例子,仿照写了一个用BeautifulSoup实现的,直接上代码吧

 

#coding:gbk
import urllib2
from bs4 import BeautifulSoup
import re
import os  

class TiebatoTxt:
    def __init__(self, url, seeLZ):
        #传入url
        self.url = url
        #是否只看楼主
         self.seeLZ = ‘?see_lz=‘+str(seeLZ)
        self.floor = 1
        self.File = None
        self.defaultTitle = "百度贴吧"

    #获得每一页的BeautifulSoup对象
    def get_body(self, pageNum):
        url = self.url + self.seeLZ  + ‘&pn=‘ + str(pageNum)
        req = urllib2.Request(url)
        try :
            html = urllib2.urlopen(req)
        except (urllib2.HTTPError, urllib2.URLError) as e:
            print u"获取帖子链接错误"
            return None
        try:
            bsObj = BeautifulSoup(html, "html.parser")
        except AttributeError as e:
            print u"获得BeautifulSoup对象错误"
            return None
        return bsObj

    #获得帖子标题
    def find_title(self, page):
        name = page.find("head").find("title").get_text()
        if name:
            return name
        else:
            return None

    #获取帖子共有多少页
    def get_pagenum(self, page):
        pageinfoList= page.findAll("li", {"class":"l_reply_num"})
        if pageinfoList is not None:
            for info in pageinfoList:
                span = info.findAll("span")
                if span is not None:
                    return span[1].get_text().encode("gbk")
        else:
            print "pageinfoList is none"

    #获得每一楼层的内容
    def get_content(self, page):
        div = page.findAll("div", {"id":re.compile("post_content_.*?")})
        contents = []
        for item in div:
            floorLine = "\n\n" + str(self.floor) + u"------------------------------------------------------\n\n"
            contents.append(floorLine)
            con = item.getText("\n", strip=True).encode("gbk", "ignore")#忽略一些特殊字符
            self.floor = self.floor + 1
            txturl = None
            txturl = item.findAll("a")
            #有些词带链接,去掉链接
            if txturl:
                for i in txturl:
                    word = i.getText(strip=True).encode("gbk", "ignore")
                    con = con.replace(("\n%s\n"%word), word)

            contents.append(con)
        return contents
            #print item.get_text(strip=True)

    def setFileTitle(self,title):
        #如果标题不是为None,即成功获取到标题
        if title is not None:
            title = title.replace(‘/‘, ‘‘)
            self.File = open(os.path.join(os.getcwd(), (title + ".txt")),"w+")
        else:
            self.File = open(os.path.join(os.getcwd(), (self.defaultTitle + ".txt")),"w+")

    def writetotxt(self,contents):
        #向文件写入每一楼的信息
        for item in contents:
            self.File.write(item)

    def start(self):
        indexPage = self.get_body(1)
        pageNum = self.get_pagenum(indexPage)
        title = self.find_title(indexPage)
        self.setFileTitle(title)
        if pageNum == None:
            print "URL已失效,请重试"
            return
        try:
            print "该帖子共有" + str(pageNum) + "页"
            for i in range(1,int(pageNum)+1):
                print "正在写入第" + str(i) + "页数据"
                page = self.get_body(i)
                contents = self.get_content(page)
                self.writetotxt(contents)
        #出现写入异常
        except IOError,e:
            print "写入异常,原因" + e.message
        finally:
            print "写入任务完成"

#270051025
if __name__ == ‘__main__‘:
    print u"请输入帖子代号"
    baseURL = ‘http://tieba.baidu.com/p/‘ + str(raw_input(u‘http://tieba.baidu.com/p/‘))
    seeLZ = raw_input(u"是否只获取楼主发言,是输入1,否输入0:")
    t = TiebatoTxt(baseURL, seeLZ)
    b = t.start()
时间: 2024-11-03 22:21:09

【爬虫】BeautifulSoup之爬取百度贴吧的帖子的相关文章

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

同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urllib2import reimport sys reload(sys)sys.setdefaultencoding("utf-8")#处理页面标签,去除图片.超链接.换行符等class Tool: #去除img标签,7位长空格 removeImg = re.compile('<img.*

百度网盘爬虫(如何爬取百度网盘)

因为要做去转盘网(分类模式点我),所以一定要爬取网盘资源,本来想自己写一个爬虫挺不容易的,不想分享出来,但最后还是决定了拿给大家一起看吧,毕竟有交流才有进步,有兴趣的朋友也可以看看我写的其他日志或者关注我,会发现去转盘网的大部分技术现在可以说是公开状态,如有对你有帮助还是认真读读吧,下面是爬虫代码,我立马公开: ps:不会python的孩子先去学学python,代码是python写的 我附上点资料:点我下载1 点我下载2 其实还有个磁力站,不过暂时技术不想公开出来,之后也想公开,喜欢的看看:ok

定时爬虫系统(以爬取[百度7日关注]为例)

1.web.xml加载servlet 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.su

芝麻HTTP:Python爬虫实战之爬取百度贴吧帖子

本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:http://tieba.baidu.com/p/3138733512?see_lz=1&pn=1 ? http:// 代表资源传输使用http协议 tieba.baidu.com 是百度的二级域名,指向百度贴吧的服务器. /p/3138733512 是服务器某个资源,即这个帖子的地址定位符 see_lz和pn是

Python爬取百度贴吧内容

参考资料:https://cuiqingcai.com/993.html  即 静觅» Python爬虫实战二之爬取百度贴吧帖子 我最近在忙学校的一个小项目的时候涉及到NLP的内容.但是在考虑如何训练的时候却才懂什么叫巧妇难为无米之炊的滋味.中文语料库实在少的可怜,偶尔有一两个带标签的语料库,拿出一看,标注惨不忍睹,都让我怀疑是不是机器标注的.正应了那句话,人工智能,有多少智能就有多少人工. 有什么办法呢,硬着头皮,走一步是一步吧,总比停滞不前要好.项目涉及到帖子,那么我相信不管是谁,首先想到的

百度图片爬虫-python版-如何爬取百度图片?

上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://5912119.blog.51cto.com/5902119/1771391 这一篇我想写写如何爬取百度图片的爬虫,这个爬虫也是:搜搜gif(在线制作功能点我) 的爬虫代码,其实爬虫整体框架还是差不多的,但就是会涉及到图片的的一些处理,还是花费了我不少时间的,所以我请阅读的本爬虫的孩子还是认真一些,毕竟程序猿都不容易啊.好的,我也不想多说,爬虫的代码我会分享到去转盘网,想下载本爬虫代码的孩子请点我下载,如果没有下

python3 爬虫学习-根据关键词爬取百度百科内容

小白编了好久才写出来,记录一下免得之后再用的时候都忘了还得重新学~ 学习爬虫最开始是学习了慕课上的python课程,然后学习了慕课和网易云上的爬虫教程.这两个自己去查一下就好了~ 开始还比较费劲,毕竟熟悉需要时间么,而且python也不太熟悉. 关于python版本:我一开始看很多资料说python2比较好,因为很多库还不支持3,但是使用到现在为止觉得还是pythin3比较好用,因为编码什么的问题,觉得2还是没有3方便.而且在网上找到的2中的一些资料稍微改一下也还是可以用. 好了,开始说爬百度百

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

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

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有