由于糗百网页格式又变了了,我就小小的更新了一下,现在只能抓取文字内容,过几天写一个可以文字图片一起抓取的,这个图片一定不能遗漏啊。。。。。
有什么问题请您提出,跪求指正啊。
<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()