python百度贴吧 发帖时间_python抓取百度度贴吧

我们打开一个百度贴吧的帖子然后查看源码

Paste_Image.png

首先我们先拿到帖子的标题,通过查看源码,我们发现,他的标题的html为:

纯原创我心中的NBA2014-2015赛季现役50大

我们需要中间的标题怎么搞呢?

肯定用正则,为了快速我们这样写:

# -*- 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)

return response.read()

except urllib2.URLError, e:

if hasattr(e, "reason"):

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

return None

def getTitle(self):

page = self.getPage(1)

pattern = re.compile('

Paste_Image.png

然后我们提取帖子每个楼层的内容如何去做呢?

看源码分析呗

很多媒体都在每赛季之前给球员排个名,我也有这个癖好…………,我会尽量理性的分析球队地位,个人能力等因素,评出我心目中的下赛季50大现役球员,这个50大是指预估他本赛季在篮球场上对球队的影响力……不是过去的荣誉什么的,所以难免有一定的主观性……如果把你喜欢的球星排低了,欢迎理性讨论!![](http://upload-images.jianshu.io/upload_images/1205414-58b2b7b444eed998.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
状元维金斯镇楼
P.S 1 我每天都至少更新一个,不TJ。
2 今年的新秀我就不考虑了,没上赛季参照

我们发现,他在一个div里面 id="post_content_53018668923" class="d_post_content j_d_post_content ",看到这我们就知道了,该怎么搞了,上代码,我们在上面的代码中增加一个获取帖子内容的方法

def getPostData(self):

page = self.getPage(1)

pattern = re.compile('

(.*?)
', re.S)

result = re.findall(pattern, page)

for item in result:

print item

Paste_Image.png

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

我找了一个处理的工具类

# -*- coding:utf-8 -*-

import urllib

import urllib2

import re

#处理页面标签类

class Tool:

#去除img标签,7位长空格

removeImg = re.compile('| {7}|')

#删除超链接标签

removeAddr = re.compile('|')

#把换行的标签换为\n

replaceLine = re.compile('

|
|
|')

#将表格制表

替换为\t

replaceTD= re.compile('

')

#把段落开头换为\n加空两格

replacePara = re.compile('

')

#将换行符或双换行符替换为\n

replaceBR = re.compile('
|
')

#将其余标签剔除

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()

由于在同一个目录下我们直接导入

from Tool import *

这样导入我们就可以在别的模块的使用啦

Paste_Image.png

完整的代码

```java

# -*- coding: UTF-8 -*- 。

import urllib

import urllib2

import re

from Tool import *

class BdTb:

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)

request = urllib2.Request(url)

response = urllib2.urlopen(request)

return response.read()

except urllib2.URLError, e:

if hasattr(e, "reason"):

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

return None

def getTitle(self):

page = self.getPage(1)

pattern = re.compile('

(.*?)', re.S)

result = re.findall(pattern, page)

for item in result:

print self.tool.replace(item)

baseURL = 'http://tieba.baidu.com/p/3138733512'

BdTb = BdTb(baseURL, 1)

BdTb.getPostData()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值