[Python]网络爬虫(八):糗事百科的网络爬虫(v0.3)源码及解析

运行效果:

# -*- coding: utf-8 -*-import urllib2 import urllib import re import thread import time#———– 加载处理糗事百科 ———– class Spider_Model:def __init__(self):self.page = 1self.pages = []self.enable = False# 将所有的段子都扣出来,添加到列表中并且返回列表def GetPage(self,page):myUrl = "" + pageuser_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()#encode的作用是将unicode编码转换成其他编码的字符串#decode的作用是将其他编码的字符串转换成unicode编码unicodePage = myPage.decode("utf-8")# 找出所有class="content"的div标记#re.S是任意匹配模式,也就是.可以匹配换行符myItems = re.findall(‘<div.*?class="content".*?title="(.*?)">(.*?)</div>’,unicodePage,re.S)items = []for item in myItems:# item 中第一个是div的标题,也就是时间# item 中第二个是div的内容,,也就是内容items.append([item[0].replace("\n",""),item[1].replace("\n","")])return items# 用于加载新的段子def LoadPage(self):# 如果用户未输入quit则一直运行while self.enable:# 如果pages数组中的内容小于2个if len(self.pages) < 2:try:# 获取新的页面中的段子们myPage = self.GetPage(str(self.page))self.page += 1self.pages.append(myPage)except:print ‘无法链接糗事百科!’else:time.sleep(1)def ShowPage(self,nowPage,page):for items in nowPage:print u’第%d页’ % page , items[0] , items[1]myInput = raw_input()if myInput == "quit":self.enable = Falsebreakdef Start(self):self.enable = Truepage = self.pageprint u’正在加载中请稍候……’# 新建一个线程在后台加载段子并存储thread.start_new_thread(self.LoadPage,())#———– 加载处理糗事百科 ———–while self.enable:# 如果self的page数组中存有元素if self.pages:nowPage = self.pages[0]del self.pages[0]self.ShowPage(nowPage,page)page += 1#———– 程序的入口处 ———– print u""" —————————————程序:糗百爬虫版本:0.3作者:why日期:2014-06-03语言:Python 2.7操作:输入quit退出阅读糗事百科功能:按下回车依次浏览今日的糗百热点 ————————————— """print u’请按下回车浏览今日的糗百内容:’ raw_input(‘ ‘) myModel = Spider_Model() myModel.Start()

版权声明:本文为博主原创文章,未经博主允许不得转载。

人若勇敢就是自己最好的朋友

[Python]网络爬虫(八):糗事百科的网络爬虫(v0.3)源码及解析

相关文章:

你感兴趣的文章:

标签云: