python爬取百度贴吧(1)

在网上参考别人的教程实现的python+beautifulsoup爬取百度贴吧的内容。

说一下实现过程,这个主要是用来抓取连载小说的,首先选择一个百度贴吧的网页,点击只看楼主,然后就全是楼主连载的小说了,使用firefox查看元素,这里选取唯一的特定cc标签,然后再进行去除html标签的处理,就可以获得文本了。

问题:1.在使用beautifulsoup时,要注意标签获取时一定要准确,哪怕复杂一点,分几次实现,也要保证准确,否则为空;

2.现在没有实现页数的控制,会一直循环下去,下个版本会改进;

3.在去除html标签时,一开始打算使用re模块的正则实现,发现一直出现错误(但是在单独选取一个html片段时进行是可以实现的),没有找到什么 原因,最后又查到了beautifulsoup的get_text()方法,直接获取内容。

代码如下:

# -*- coding: utf-8 -*-  
import re
import urllib
import urllib2
import time
import thread
from bs4 import BeautifulSoup


class baidu_tieba:
    header={
        'Host':'tieba.baidu.com',
        'Connection':'keep-alive',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0',
        'Accept-Language': 'zh-CN,zh;q=0.8'
        }

    def __init__(self):
        self.page = 1
        self.pages = list()
        self.enable = False
        self.url = 'http://tieba.baidu.com/p/3434860781?see_lz=1&pn='

    def get(self,page):

        self.url = self.url + page

        req = urllib2.Request(url=self.url,headers=self.header)
        result = urllib2.urlopen(req)
        result = result.read()
        #result = result.decode('gbk')

        #print(result)


        soup = BeautifulSoup(result)
        content = soup.find('div',{'id':'j_p_postlist'}).findAll('cc')
        
        
        #print(content)
        items = list()
        for item in content:
            print(item.get_text())
            #print(len(item))
            
            items.append(item.get_text())


        return items

    def load(self):
        while self.enable:
                if len(self.pages) < 2:
                    try:   
                        myPage = self.get(str(self.page))
                        self.pages.append(myPage)
                        self.page += 1
                    except:
                        print u'无法连接百度贴吧...'
                else:
                    time.sleep(1)



    def show(self,currentPage,page):
        for items in currentPage:
            #reg = re.compile('<[^>]*>') 代码一直不能通过,但是我在选取一段html单独测试时是可以实现去除html标签的
            #items = reg.sub('',items)
            print u'第%d页' % page , items
            myInput = raw_input()
            if myInput == 'quit':
                self.enable = False
                break



    def start(self):
        self.enable = True
        page = self.page

        print u'正在加载中,请稍后...'

        thread.start_new_thread(self.load,())


        while self.enable:
            if self.pages:
                currentPage = self.pages[0]
                del self.pages[0]
                self.show(currentPage,page)
                page += 1
        
        
        
                    
print u'请按下回车浏览贴吧内容:'  
raw_input(' ')

tieba = baidu_tieba()  
tieba.start()     


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值