贴吧助手web版

 找回密码
 立即注册
搜索
查看: 1507|回复: 5

python抓取百度度贴吧

[复制链接]
     紫钻仅向指定用户开放  
  • TA的每日心情
    不屑
    前天 19:07
  • 签到天数: 1039 天

    [LV.10]以坛为家III

    674

    主题

    1442

    帖子

    1484

    积分

    管理员

    Rank: 15Rank: 15Rank: 15Rank: 15

    金币
    3355

    接口达人工具作者土豪之星

    发表于 2018-6-23 18:01:37 | 显示全部楼层 |阅读模式
    我们打开一个百度贴吧的帖子然后查看源码http://tieba.baidu.com/p/3138733512?see_lz=1



    Paste_Image.png

    首先我们先拿到帖子的标题,通过查看源码,我们发现,他的标题的html为:
    <h3 class="core_title_txt pull-left text-overflow  " title="纯原创我心中的NBA2014-2015赛季现役50大" style="width: 396px">纯原创我心中的NBA2014-2015赛季现役50大</h3>我们需要中间的标题怎么搞呢?
    肯定用正则,为了快速我们这样写:




    1. # -*- coding: UTF-8 -*- 。
    2. import urllib
    3. import urllib2
    4. import re


    5. class BDTB:
    6.     def __init__(self, baseUrl, seeLZ):
    7.         self.baseURL = baseUrl
    8.         self.seeLZ = '?see_lz=' + str(seeLZ)

    9.     def getPage(self, pageNum):
    10.         try:
    11.             url = self.baseURL + self.seeLZ + '&pn=' + str(pageNum)
    12.             request = urllib2.Request(url)
    13.             response = urllib2.urlopen(request)
    14.             return response.read()
    15.         except urllib2.URLError, e:
    16.             if hasattr(e, "reason"):
    17.                 print u"连接百度贴吧失败,错误原因", e.reason
    18.                 return None

    19.     def getTitle(self):
    20.         page = self.getPage(1)
    21.         pattern = re.compile('<h3 class="core_title_txt pull-left text-overflow.*?>(.*?)</h3>', re.S)
    22.         result = re.search(pattern, page)
    23.         if result:
    24.             print result.group(1)


    25. baseURL = 'http://tieba.baidu.com/p/3138733512'
    26. bdtb = BDTB(baseURL, 1)
    27. bdtb.getTitle()
    复制代码
    这样我们就拿到了帖子的标题



    Paste_Image.png

    然后我们提取帖子每个楼层的内容如何去做呢?
    看源码分析呗
    <div id="post_content_53018668923" class="d_post_content j_d_post_content ">            很多媒体都在每赛季之前给球员排个名,我也有这个癖好…………,我会尽量理性的分析球队地位,个人能力等因素,评出我心目中的下赛季50大现役球员,这个50大是指预估他本赛季在篮球场上对球队的影响力……不是过去的荣誉什么的,所以难免有一定的主观性……如果把你喜欢的球星排低了,欢迎理性讨论!![](http://upload-images.jianshu.io/ ... imageView2/2/w/1240)<br><br><br><br>状元维金斯镇楼<br>P.S 1 我每天都至少更新一个,不TJ。<br>      2 今年的新秀我就不考虑了,没上赛季参照</div>我们发现,他在一个div里面 id="post_content_53018668923" class="d_post_content j_d_post_content ",看到这我们就知道了,该怎么搞了,上代码,我们在上面的代码中增加一个获取帖子内容的方法
    def getPostData(self):        page = self.getPage(1)        pattern = re.compile('<div id="post_content_.*? class="d_post_content j_d_post_content ">(.*?)</div>', re.S)        result = re.findall(pattern, page)        for item in result:            print item


    Paste_Image.png

    这样就拿到了第一页的每个楼层的数据了,我们看到有很多换行啊,什么的数据,我需要替换下
    我找了一个处理的工具类




    1. # -*- coding:utf-8 -*-
    2. import urllib
    3. import urllib2
    4. import re

    5. #处理页面标签类
    6. class Tool:
    7.     #去除img标签,7位长空格
    8.     removeImg = re.compile('<img.*?>| {7}|')
    9.     #删除超链接标签
    10.     removeAddr = re.compile('<a.*?>|</a>')
    11.     #把换行的标签换为\n
    12.     replaceLine = re.compile('<tr>|<div>|</div>|</p>')
    13.     #将表格制表<td>替换为\t
    14.     replaceTD= re.compile('<td>')
    15.     #把段落开头换为\n加空两格
    16.     replacePara = re.compile('<p.*?>')
    17.     #将换行符或双换行符替换为\n
    18.     replaceBR = re.compile('<br><br>|<br>')
    19.     #将其余标签剔除
    20.     removeExtraTag = re.compile('<.*?>')
    21.     def replace(self,x):
    22.         x = re.sub(self.removeImg,"",x)
    23.         x = re.sub(self.removeAddr,"",x)
    24.         x = re.sub(self.replaceLine,"\n",x)
    25.         x = re.sub(self.replaceTD,"\t",x)
    26.         x = re.sub(self.replacePara,"\n    ",x)
    27.         x = re.sub(self.replaceBR,"\n",x)
    28.         x = re.sub(self.removeExtraTag,"",x)
    29.         #strip()将前后多余内容删除
    30.         return x.strip()

    复制代码
    由于在同一个目录下我们直接导入
    from Tool import *
    这样导入我们就可以在别的模块的使用啦


    完整的代码
    1. ```java
    2. # -*- coding: UTF-8 -*- 。
    3. import urllib
    4. import urllib2
    5. import re
    6. from Tool import *


    7. class BdTb:
    8.     def __init__(self, baseUrl, seeLZ):
    9.         self.baseURL = baseUrl
    10.         self.seeLZ = '?see_lz=' + str(seeLZ)
    11.         self.tool = Tool()

    12.     def getPage(self, pageNum):
    13.         try:
    14.             url = self.baseURL + self.seeLZ + '&pn=' + str(pageNum)
    15.             request = urllib2.Request(url)
    16.             response = urllib2.urlopen(request)
    17.             return response.read()
    18.         except urllib2.URLError, e:
    19.             if hasattr(e, "reason"):
    20.                 print u"连接百度贴吧失败,错误原因", e.reason
    21.                 return None

    22.     def getTitle(self):
    23.         page = self.getPage(1)
    24.         pattern = re.compile('<h3 class="core_title_txt pull-left text-overflow.*?>(.*?)</h3>', re.S)
    25.         result = re.search(pattern, page)
    26.         if result:
    27.             print result.group(1)

    28.     def getPostData(self):
    29.         page = self.getPage(1)
    30.         pattern = re.compile('<div id="post_content_.*? class="d_post_content j_d_post_content ">(.*?)</div>', re.S)
    31.         result = re.findall(pattern, page)
    32.         for item in result:
    33.             print   self.tool.replace(item)


    34. baseURL = 'http://tieba.baidu.com/p/3138733512'
    35. BdTb = BdTb(baseURL, 1)
    36. BdTb.getPostData()


    复制代码










    上一篇:Android仿百度贴吧客户端Loading小球
    下一篇:贴吧如何快速引流不被秒删总结,绝对干货!不干,你打我!
    喵星人贴吧助手你值得拥有
    回复

    使用道具 举报

            
  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 327 天

    [LV.8]以坛为家I

    210

    主题

    353

    帖子

    398

    积分

    如来喵掌

    Rank: 8

    金币
    1223
    发表于 2019-3-1 16:47:39 | 显示全部楼层
    一脸懵逼我只是路过打酱油的
    喵星人贴吧助手你值得拥有
    回复 支持 反对

    使用道具 举报

            
  • TA的每日心情
    开心
    2019-6-4 00:09
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    6

    帖子

    3

    积分

    按个爪印

    Rank: 1

    金币
    1
    发表于 2019-6-4 18:55:12 | 显示全部楼层
    啥也不说了,感谢楼主分享哇!
    回复 支持 反对

    使用道具 举报

            
  • TA的每日心情
    开心
    2019-6-4 00:09
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    6

    帖子

    3

    积分

    按个爪印

    Rank: 1

    金币
    1
    发表于 2019-6-4 19:16:57 | 显示全部楼层
    啥也不说了,感谢楼主分享哇!
    回复 支持 反对

    使用道具 举报

            
  • TA的每日心情
    开心
    2019-6-4 00:09
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    6

    帖子

    3

    积分

    按个爪印

    Rank: 1

    金币
    1
    发表于 2019-6-4 19:18:09 | 显示全部楼层
    正需要,支持楼主大人了!
    回复 支持 反对

    使用道具 举报

            
  • TA的每日心情
    开心
    2019-6-4 00:09
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    6

    帖子

    3

    积分

    按个爪印

    Rank: 1

    金币
    1
    发表于 2019-6-4 19:19:41 | 显示全部楼层
    确实是难得好帖啊,顶先
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    网站地图|Archiver|手机版|小黑屋|贴吧助手web版

    Copyright © 2016-2020 TieBaZSTool by TieBaZSAll Rights Reserved.

    快速回复 返回顶部 返回列表