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

获取目标贴吧的贴子标题

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

猜你喜欢

转载自blog.csdn.net/jian15093532273/article/details/80457043