Python3抓取糗事百科
2015-07-30 10:14
232 查看
import urllib.request import urllib.parse import urllib.error import http.cookiejar import re class QSBK : #初始化方法,定义一些变量 def __init__(self) : self.pageIndex = 1 self.user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36" #初始化headers self.headers = ("User-Agent", self.user_agent) self.stories = [] self.enable = False print(self.headers) self.cj=http.cookiejar.CookieJar() self.opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.cj)) self.opener.addheaders=[self.headers,('Cookie','4564564564564564565646540')] urllib.request.install_opener(self.opener) def getPage(self,pageIndex) : try : url = "http://www.qiushibaike.com/hot/page/"+str(pageIndex) #构建请求的url response = urllib.request.urlopen(url) mybytes = response.read() mybytes = mybytes.decode("utf8") return mybytes except urllib.error.URLError as e: print("出错了") def getPageItems(self,pageIndex) : pageCode = self.getPage(pageIndex) if not pageCode: print ("页面加载失败....") return None pattern = re.compile('<div.*?class="author.*?>.*?<a.*?>(.*?)</a>.*?<div.*?class'+ '="content">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S) items = re.findall(pattern,pageCode) pageStories = [] for item in items: pos = item[1].find("<!--") #print(pos) #print(item[1][0:pos]) #print(item[1][pos+4:len(item[1])-5]) content = item[1][0:pos] timestamp = item[1][pos+4:len(item[1])-5] author = item[0][item[0].find("/>")+2:len(item[0])] #print(timestamp) #print(item[3]) #print(content.strip()+"\n") #是否含有图片 haveImg = re.search("img",content) #如果不含有图片,把它加入list中 if not haveImg: if int(item[3]) > 200 : #print(author.strip()+",写于"+timestamp+",获得"+item[3]+"点赞") pageStories.append([author.strip(),timestamp.strip(),content.strip(),int(item[3])]) return pageStories def loadPage(self) : #如果当前未看的页数少于2页,则加载新一页 if self.enable == True: if len(self.stories) < 2: #获取新一页 pageStories = self.getPageItems(self.pageIndex) #将该页的段子存放到全局list中 if pageStories: self.stories.append(pageStories) #获取完之后页码索引加一,表示下次读取下一页 self.pageIndex += 1 def getOneStory(self,pageStories,page) : #遍历一页的段子 for story in pageStories: #等待用户输入 instr = input() #每当输入回车一次,判断一下是否要加载新页面 self.loadPage() #如果输入Q则程序结束 if instr == "Q": self.enable = False return print ("第%d页,%s发布于%s,获得%s赞:\n%s" %(page,story[0],story[1],story[3],story[2])) #开始方法 def start(self): print ("正在读取糗事百科,按回车查看新段子,Q退出") #使变量为True,程序可以正常运行 self.enable = True #先加载一页内容 self.loadPage() #局部变量,控制当前读到了第几页 nowPage = 0 while self.enable: if len(self.stories)>0: #从全局list中获取一页的段子 pageStories = self.stories[0] #当前读到的页数加一 nowPage += 1 #将全局list中第一个元素删除,因为已经取出 del self.stories[0] #输出该页的段子 self.getOneStory(pageStories,nowPage) spider = QSBK() spider.start()
相关文章推荐
- python 面向对象编程
- python 调试
- 迅雷下载最近经常异常崩溃,下个Python脚本自动监控重启之
- python字符串格式化
- Python HTML Resolution Demo - SGMLParser & PyQuery
- 用python编写mapreduce版的wordcount程序
- Python 类介绍
- Python的迭代器和生成器
- python for else primers
- python的正则表达式 re
- python的正则表达式 re
- Python type类具体的三大分类:metaclasses,classes,instance
- Python type类具体的三大分类:metaclasses,classes,instance
- python开发_大小写转换,首字母大写,去除特殊字符
- python开发_大小写转换,首字母大写,去除特殊字符
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
- Python图形界面开发包 PyGTK
- Python图形界面开发包 PyGTK
- python使用easygui写图形界面程序