python 爬取糗事百科

step 1:构建一个提取糗事百科笑话的函数
import urllib2    
import urllib    
import re    
import thread    
import time 
import sys 
reload(sys) 
sys.setdefaultencoding("utf-8")  

def GetPage(page):    
        myUrl = "http://www.qiushibaike.com/hot/page/"+ str(page) + "/?s=4936484"   
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'   
        headers = { 'User-Agent' : user_agent }   
        req = urllib2.Request(myUrl, headers = headers)   
        myResponse = urllib2.urlopen(req)  
        myPage = myResponse.read() 
        unicodePage = myPage.decode("utf-8")  
        myItems = re.findall('<div.*?class="content".*?>.*?<span>(.*?)</span>.*?</div>',unicodePage,re.S)  

        items=[]
        for item in myItems:
            print item + '\n'
            #items.append(item[0].replace("\n",""))    

        #return items           


if __name__=="__main__":

    a=GetPage(2)
    print a
step 2:构建一个获得糗事百科笑话的类,并保证每次读取到的有2个页面的内容。

tips:如有报错,注意下缩进关系

import urllib2    
import urllib    
import re    
import thread    
import time 
import sys 
reload(sys) 
sys.setdefaultencoding("utf-8")  

class spider_qs:
    def __init__(self):    
            self.page = 1    
            self.pages = []    
            self.enable = True

    #将每一页的段子提取出来,添加到列表中并且返回列表    
    def GetPage(self,page):    
            myUrl = "http://www.qiushibaike.com/hot/page/"+ str(page) + "/?s=4936484"   
            user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'   
            headers = { 'User-Agent' : user_agent }   
            req = urllib2.Request(myUrl, headers = headers)   
            myResponse = urllib2.urlopen(req)  
            myPage = myResponse.read() 
            unicodePage = myPage.decode("utf-8")  
            myItems = re.findall('<div.*?class="content".*?>.*?<span>(.*?)</span>.*?</div>',unicodePage,re.S)  

            items=[]
            for item in myItems:
                #print item + '\n'
                items.append(item)    #items.append(item.replace("\n",""))将item的换行符转为空白

            return items 

    #用于加载新的段子,保证self.pages里面有2页的爬取内容
    def LoadPage(self):    
        # 如果用户未输入quit则一直运行    
            while self.enable:    
                # 如果pages数组中的内容小于2个    
                if len(self.pages) < 2:    
                    try:    
                        # 获取新的页面中的段子们,从第1页开始    
                        myPage = self.GetPage(self.page)    
                        self.page += 1    
                        self.pages.append(myPage)    
                    except:    
                        print '无法链接糗事百科!'    
                else:    
                    time.sleep(1) 
                    return self.pages           


if __name__=="__main__":

    a=spider_qs()
    b=a.LoadPage()
    print b
step 3:构建一个完整的爬虫程序

tips:线程的用法不太会

import urllib2    
import urllib    
import re    
import thread    
import time 
import sys 
reload(sys) 
sys.setdefaultencoding("utf-8")  

class spider_qs:
    def __init__(self):    
            self.page = 1    
            self.pages = []    
            self.enable = False

    #将每一页的段子提取出来,添加到列表中并且返回列表    
    def GetPage(self,page):    
            myUrl = "http://www.qiushibaike.com/hot/page/"+ str(page) + "/?s=4936484"   
            user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'   
            headers = { 'User-Agent' : user_agent }   
            req = urllib2.Request(myUrl, headers = headers)   
            myResponse = urllib2.urlopen(req)  
            myPage = myResponse.read() 
            unicodePage = myPage.decode("utf-8")  
            myItems = re.findall('<div.*?class="content".*?>.*?<span>(.*?)</span>.*?</div>',unicodePage,re.S)  

            items=[]
            for item in myItems:
                #print item + '\n'
                items.append(item)    #items.append(item.replace("\n",""))将item的换行符转为空白

            return items 

    #用于加载新的段子,保证self.pages里面有2页的爬取内容
    def LoadPage(self):    
        # 如果用户未输入quit则一直运行    
            while self.enable:    
                # 如果pages数组中的内容小于2个    
                if len(self.pages) < 2:    
                    try:    
                        # 获取新的页面中的段子们,从第1页开始    
                        myPage = self.GetPage(self.page)    
                        self.page += 1    
                        self.pages.append(myPage)  #起始状态下,self.pages包含有第1、2页面的段子  
                    except:    
                        print '无法链接糗事百科!'    
                else:    
                    time.sleep(1) 
                    return self.pages   

    #启动该类
    def Start(self):    
            self.enable = True    
            page = self.page    #为1
            print u'正在加载中请稍候......'  

            # 新建一个线程在后台加载段子并存储    
            thread.start_new_thread(self.LoadPage,())   #help(thread.start_new_thread) 

            #----------- 加载处理糗事百科 -----------    
            while self.enable:    
                # 如果self的page数组中存有元素    
                if self.pages:    
                    nowPage = self.pages[0]    #[【】,【】],将第一个列表赋值给nowPage
                    del self.pages[0]   #删除self.pages,则Loadpage函数将继续往第3页读取段子 
                    self.ShowPage(nowPage,page)    
                    page += 1   

    def ShowPage(self,nowPage,page):    
            for items in nowPage:    
                print u'第%d页' % page , items  
                myInput = raw_input()    
                if myInput == "quit":    #输入quit,则退出程序。否则按任意键都能继续
                    self.enable = False    
                    break  

if __name__=="__main__":

    print u'请按下回车浏览今日的糗百内容:'
    raw_input('')   #此处输入回车键即可不断往下读取糗百段子
    a=spider_qs()
    myqb=a.Start()

参考链接:
http://blog.csdn.net/pleasecallmewhy/article/details/8932310

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值