获取目标贴吧的贴子标题
# -*- coding:utf-8 -*-
# 这是一个爬取贴吧贴子标题的程序
# 导入需要的模块
import urllib
import urllib2
import re
# 定义一个爬虫类
class Spider:
# 定义初始化方法
def __init__(self, kw):
# 从第一页开始
self.page = 1
# 目标贴吧的名字
self.kw = kw
# 爬虫控制开关
self.switch = True
# 这是一个将结果写入文档的函数
def writePage(self, content):
'''
写入每页的数据
:content 爬虫取到的数据
'''
with open('log.txt', 'a') as f:
f.write(content)
# 这是一个爬取内容的界面
def loadPage(self):
'''
下载界面
'''
# 待组合的url
url = 'http://tieba.baidu.com/f?'
# 将贴吧名字编码放入url中
key = urllib.urlencode({'kw':self.kw})
# 每爬一页,pn的值就会增加50
pn = (self.page-1) * 50
print(pn)
# 组合url
fullurl = url + key + '&pn=' + str(pn)
# 请求头
headers = {'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.3'}
request = urllib2.Request(fullurl, headers=headers)
response = urllib2.urlopen(request)
# 获取每页的html源码
html = response.read()
# 创建正则表达式规则对象,匹配每页里的内容
# pattern = re.compile("<div\sclass='threadlist_title.pull_left.j_th_tit'><a\s(.*?)>(.*?)</a></div>", re.S)
# pattern = re.compile('<div\sclass="threadlist_title pull_left j_th_tit ">(.*?)</div>', re.S)
pattern = re.compile('<a\srel="noreferrer".*?\sclass="j_th_tit ">(.*?)</a>', re.S)
# 将正则匹配对象应用到html源码中,返回所有帖子的列表
content_list = pattern.findall(html)
for content in content_list:
msg = content + '\n'
self.writePage(msg)
def startWork(self):
'''
控制爬虫运行
'''
while self.switch:
msg = '这是第'+ str(self.page) +'页'+ '\n'
self.writePage(msg)
self.loadPage()
print('这是第%s页' %self.page)
c = raw_input('是否继续?(返回请输入q)')
if c == 'q':
self.switch = False
self.page += 1
print('谢谢使用!')
# 主函数
if __name__=='__main__':
kw = raw_input('请输入想要爬取的贴吧名:')
s = Spider(kw)
s.startWork()