爬虫---一个简单的贴吧爬虫

获取目标贴吧的贴子标题

# -*- 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("(.*?)
", re.S) # pattern = re.compile('(.*?)
', re.S) pattern = re.compile('(.*?)', 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()

你可能感兴趣的:(爬虫)