目标:
1、对百度贴吧的任意帖子进行爬取
2、爬取帖子指定内容
3、将爬取内容保存到文件
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
上代码:
# 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)
<h3 class="core_title_txt pull-left text-overflow " title="纯原创我心中的NBA2014-2015赛季现役50大" style="width: 396px">纯原创我心中的NBA2014-2015赛季现役50大h3>
所以我们想提取 h1标签中的内容,同时还要指定这个class确定唯一,因为h1标签实在太多啦。
正则表达式如下:
="core_title_txt.*?>(.*?)
获取标题代码
#获取帖子标题
def getTitle(self):
page = self.getPage(1)
pattern = re.compile('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('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()