Python爬虫之百度贴吧

目标:
1、对百度贴吧的任意帖子进行爬取
2、爬取帖子指定内容
3、将爬取内容保存到文件

1、分析url

这里写图片描述

https://tieba.baidu.com/p/3138733512?see_lz=1&pn=1
分析:
https:传输协议
tieba.baidu.com:百度二级域名
p/3138733512:资源定位
see_lz=1&pn=1:参数see_lz:楼主 pn=1:第一页

所以上面的url分为两个部分
基础部分: https://tieba.baidu.com/p/3138733512
参数:see_lz=1&pn=1

2、页面抓取

上代码:

# coding=utf-8
import urllib
import urllib2
import re
#百度贴吧爬虫类
class BDTB:
    #初始化,传入基地址,是否看楼主的参数
    def __init__(self, baseUrl, seeLZ):
        self.baseURL = baseUrl
        self.seeLZ = '?see_lz='+str(seeLZ)
    #传入页码,获取该页帖子的代码
    def getPage(self,pageNum):
        try:
            url = self.baseURL+self.seeLZ+'&pn'+str(pageNum)
            request = urllib2.Request(url)
            response = urllib2.urlopen(request)
            result =  response.read()
            print(result)
            return result
        except urllib2.URLError,e:
            if hasattr(e,"reason"):
                print u"连接百度贴吧失败,错误原因",e.reason
                return None

baseURL = 'http://tieba.baidu.com/p/3138733512'
bdtb = BDTB(baseURL,1)
bdtb.getPage(1)


print(result)这句是输出源代码
运行程序:
这里写图片描述

3、 提取相关信息

提取贴吧标题
谷歌浏览器按F12,查找标题的html代码
这里写图片描述

<h3 class="core_title_txt pull-left text-overflow  " title="纯原创我心中的NBA2014-2015赛季现役50大" style="width: 396px">纯原创我心中的NBA2014-2015赛季现役50大</h3>

所以我们想提取 h1标签中的内容,同时还要指定这个class确定唯一,因为h1标签实在太多啦。
正则表达式如下:

<h3 class="core_title_txt.*?>(.*?)</h3>

获取标题代码

 #获取帖子标题
    def getTitle(self):
        page = self.getPage(1)
        pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
        result = re.search(pattern,str(page))
        if result:
            print result.group(1)  # 测试输出
            return result.group(1).strip()
        else:
            return None

完整代码:

# coding=utf-8
import urllib
import urllib2
import re
#百度贴吧爬虫类
class BDTB:
    #初始化,传入基地址,是否看楼主的参数
    def __init__(self, baseUrl, seeLZ):
        self.baseURL = baseUrl
        self.seeLZ = '?see_lz='+str(seeLZ)
    #传入页码,获取该页帖子的代码
    def getPage(self,pageNum):
        try:
            url = self.baseURL+self.seeLZ+'&pn'+str(pageNum)
            request = urllib2.Request(url)
            response = urllib2.urlopen(request)
            result =  response.read()
            return result
        except urllib2.URLError,e:
            if hasattr(e,"reason"):
                print u"连接百度贴吧失败,错误原因",e.reason
                return None
    #获取帖子标题
    def getTitle(self):
        page = self.getPage(1)
        pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
        result = re.search(pattern,str(page))
        if result:
            print result.group(1)  # 测试输出
            return result.group(1).strip()
        else:
            return None
baseURL = 'http://tieba.baidu.com/p/3138733512'
bdtb = BDTB(baseURL,1)
bdtb.getPage(1)
bdtb.getTitle()



运行:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值