专栏首页python学习教程Python爬虫学习之爬取百度贴吧资源

Python爬虫学习之爬取百度贴吧资源

爬取百度贴吧某帖子的各楼层的内容

案例源码

# coding=utf-8

import urllib2

from bs4 import BeautifulSoup


class BDTB:

    def __init__(self, baseurl, seeLZ, floorTag):

        self.baseurl = baseurl

        self.seeLZ = '?see_lz=' + str(seeLZ)

        self.file = None

        self.floor = 1

        self.floorTag = floorTag

        self.defaultTitle = u"百度贴吧"

    def getpage(self, pagenum):

        try:

            url = self.baseurl + self.seeLZ + '&pn=' + str(pagenum)

            request = urllib2.Request(url)

            response = urllib2.urlopen(request)

            page = BeautifulSoup(response, "html5lib")

            return page

        except urllib2.URLError, e:

            if hasattr(e, 'reason'):

                print u"连接百度贴吧失败,错误原因", e.reason

                return None

    def getTitle(self):

        page = self.getpage(1)

        tag = page.h3

        title = tag['title']

        print title

        return title

    def getPageNum(self):

        page = self.getpage(1)

        num = page.find_all(attrs={"class": "red"})

        pagenum = num[1].string

        return int(pagenum)

    def getcontent(self):

        pagenum = self.getPageNum() + 1

        contents = []

        for num in range(1, pagenum):

            page = self.getpage(num)

            num = page.find_all('cc')

            for item in num:

                content = item.get_text()

                contents.append(content.encode('utf-8'))

        return contents

    def getFileTitle(self):

        title = self.getTitle()

        if title is not None:

            self.file = open(title + ".txt", "w+")

        else:

            self.file = open(self.defaultTitle + ".txt", "w+")

    def writeData(self):

        contents = self.getcontent()

        for item in contents:

            if self.floorTag == '1':

                floorLine = '\n' + \
                    str(self.floor) + \
                    u'---------------------------------------------\n'

                self.file.write(floorLine)

            self.file.write(item)

            self.floor += 1

    def start(self):

        self.getFileTitle()

        pagenum = self.getPageNum()

        if pagenum == None:

            print "URL已失效,请重试"

            return

        try:

            print "该帖子共有" + str(pagenum) + "页"

            self.writeData()

        except IOError, e:

            print "写入异常,原因" + e.message

        finally:

            print "写入成功"


print u"请输入帖子代号"

baseurl = 'http://tieba.baidu.com/p/' + \
    str(raw_input(u'http://tieba.baidu.com/p/'))

seeLZ = raw_input("是否只获取楼主发言,是输入1,否输入0\n")

floorTag = raw_input("是否写入楼层信息,是输入1否输入0\n")

bdtb = BDTB(baseurl, seeLZ, floorTag)

bdtb.start()

本文分享自微信公众号 - python教程(pythonjc),作者:小雨

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手把手教你用Python开发“剪刀石头布”小游戏【附源码】

    最近在学习PyQt5可视化界面,这是一个内容非常丰富的gui库,相对于tkinter库,功能更加强大,界面更加美观,操作也不难。于是我开始小试牛刀,用PyQt...

    python学习教程
  • python爬虫教程:批量抓取 QQ 群信息

    本文讲解Python批量抓取 QQ 群信息,包括群名称、群号、群人数、群主、地域、分类、标签、群简介等内容,返回 XLS / CSV / JSON 结果文件。

    python学习教程
  • Python开发植物大战僵尸游戏

    ------------------- End -------------------

    python学习教程
  • 三、wss连接B站弹幕

    py3study
  • unslider源码分析

    根据Bootstrap中文网的介绍,Unslider一个超小的 jQuery轮播(slider)插件,参照这个汉化版的介绍页面,这个插件有你需要的优点,但是本...

    用户3579639
  • MJRefresh源码剖析与学习

    建议查看原文:https://www.jianshu.com/p/23c876f8ae39(不定时更新)

    Dwyane
  • 商业篇 | 使用python开发性格分析工具卖钱

    如此不均衡的贫富差距,各行业的领导者如何能管理好公司,让员工们即努力产出,又能安于现状呢?每个领导者必学的一门课程就是职场心理学。只有你充分了解员工心理与对应的...

    叫我龙总
  • 福利来啦,送给大家一个小游戏的源码,不要错过哟(复制粘贴运行即可玩)

    从小到大玩过很多的游戏,在我小时候,能玩游戏的地方不多,那时玩游戏都是偷摸玩的,只要是个游戏就觉得非常有趣,比较经典的有魂斗罗,拳皇,超级玛丽,贪吃蛇,俄罗斯方...

    松鼠爱吃饼干
  • 喜欢的歌曲不在一个平台怎么办?你需要一个自己专属的音乐播放器

    网易云音乐,QQ音乐,酷狗音乐,是我们经常会用到的音乐软件,当然有时候我们因为一首歌,需要在各大音乐平台上跳转,那么我们完全可以使用python自己打造一款音乐...

    松鼠爱吃饼干
  • python实现队列

    队列是一种先进先出的数据类型,它的跟踪原理类似于在超市收银处排队,队列里的的第一个人首先接受服务,新的元素通过入队的方式添加到队列的末尾,而出队就是将队列的头元...

    一墨编程学习

扫码关注云+社区

领取腾讯云代金券