抓取糗百内容小爬虫(python2.7) 2015最新版


由于糗百网页格式又变了了,我就小小的更新了一下,现在只能抓取文字内容,过几天写一个可以文字图片一起抓取的,这个图片一定不能遗漏啊。。。。。

有什么问题请您提出,跪求指正啊。

<pre class="python" name="code"># -*- coding:utf8 -*-

"""
新建立一个线程一直在提取想要的内容,pages中存取的内容小于两页的时候才爬去网页内容
否则将会进入sleep,另一个线程就是在显示,一直有一个输入在循环,如果输入quit则
结束,如果输入其他任意键则会显示一页中的一条,当其中一页都显示完之后,在显示下一页

"""

import urllib2
import urllib
import re
import thread
import time

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

    def GetPage(self,page):
        myurl =  "http://m.qiushibaike.com/hot/page/"+page
        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()#将网页内容读出放在mypage中
        unicodePage = myPage.decode("utf-8")#将数据转换为utf8编码的内容

        myItems = re.findall('<div.*?class="content".*?>(.*?)<!--(.*?)</div>',unicodePage,re.S)#找出所有的符合的内容,返回一个列表
        items = []
        for item in myItems:#将列表中的数据依次读出,整理格式,存到另外一个列表并返回
            items.append([item[0].replace("\n",""),item[1].replace("\n","")])#将\n替换成空
        return items
    
    def LoadPage(self):
        while self.enable:
            if len(self.pages)<2:
                try:
                    myPage = self.GetPage(str(self.page))#抓取网页,通过page的页数进入相应的页面
                    self.page+=1
                    self.pages.append(myPage)#将网页上符合的内容都存在pages列表中,返回的就是一个列表
                except:
                    print"无法连接糗事百科!"
            else:
                time.sleep(1)

    def ShowPage(self,nowPage,page):
        for items in nowPage:
            print u"第%d页" %page,items[0],items[1]#循环一次输入一次,如果quit程序结束
            myInput = raw_input()
            if myInput == "quit":
                self.enable = False
                break;
    def Start(self):
        self.enable = True
        page = self.page

        print "正在加载中请稍后。。。"

        thread.start_new_thread(self.LoadPage,())#新建一个线程,开始抓取网页的内容,并通过正则取出想要的内容

        while self.enable:
            if self.pages:
                nowPage = self.pages[0]#从pages数组中获取网页,并一条一条显示
                del self.pages[0]
                self.ShowPage(nowPage,page)#因为pages里存储的就是列表,相当于一个二维数组,多个页面每个页面中还有多条内容
                page += 1


print u"""
 ------------------------------
 |        京东放养的爬虫        |
 ------------------------------
 """

print u'请按下任意键浏览今日糗百内容'
raw_input(' ')
myModel = Spider_model()
myModel.Start()
    

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值