最近在学习python,在网上看到一个抓取糗百的段子的脚本。
思路简单清晰。 看了后自己学着写了一下代码,作为一个初学者,基本功不是很扎实。动手能力较差,写的时候收获也蛮多。简单好用易于学习。
#coding=utf-8
import urllib2
import re
class Qsbk:
def __init__(self):
self.pageIndex=1;
self.enable=False
self.user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
self.headers={ 'User-Agent' : self.user_agent }
self.stories=[]
def getPage(self,pageIndex):
try:
url="http://www.qiushibaike.com/hot/page/"+str(pageIndex)
request=urllib2.Request(url,headers=self.headers)
response=urllib2.urlopen(request)
page=response.read().decode('utf-8')
return page
except urllib2.URLError,e:
if hasattr(e, 'reason'):
print "读取糗事百科失败,失败原因为"+e.reason
return None
def getPageItems(self,pageIndex):
page=self.getPage(self.pageIndex)
if not page:
print u'读取页面为空,出错'
return
pattern = re.compile('<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class'+
'="content".*?title="(.*?)">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
items = re.findall(pattern,page)
pageStories=[]
for item in items:
haveImg=re.search("img",item[3])
if not haveImg:
pageStories.append([item[0].strip(),item[1].strip(),item[2].strip(),item[4].strip()])
return pageStories
def loadpage(self):#读取新的一页 并把新一页的内容添加到stroies中
if self.enable==True:
if len(self.stories)<2:
pageStories=self.getPageItems(self.pageIndex)
if pageStories:
self.stories.append(pageStories)
self.pageIndex+=1
def start(self):
self.enable=True
print u"正在读取糗事百科,按回车查看新段子,q退出"
nowpage=0
self.loadpage() #load
while self.enable:
if len(self.stories)>0:
pageStories=self.stories[0]
nowpage+=1
del self.stories[0]
for story in pageStories:
input=raw_input('>')
self.loadpage()
if input=='q':
self.enable=False
print '您已退出糗百抓抓抓程序,祝您天天开心'
return
print u"第%d页\t发布人:%s\t发布时间:%s\n%s\n赞:%s\n" %(nowpage,story[0],story[1],story[2],story[3])
if __name__ == '__main__':
spider=Qsbk()
spider.start()
附参考地址:http://cuiqingcai.com/990.html
附python2.7.9下载地址:
https://www.python.org/ftp/python/2.7.9/python-2.7.9.msi