爬蟲 內涵段子

wanghandou發表於2017-10-20
import urllib2
import urllib
import re

class spilder:
	def __init__(self):
		self.page=1#初始頁是1
		self.switch=True#如果是True就開始爬

	def loadpage(self):
		"""下載頁面"""
		print u"正在下載頁面...."
		url="http://www.isocialkey.com/article/list_5_"+str(self.page)+".html"
		print url
		headers={"User-Agent":" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}
		request=urllib2.Request(url,headers=headers)
		response=urllib2.urlopen(request)
		html=response.read()

		#將正則匹配物件應用到html原始碼字串中,返回這個頁面的所有段子的列表
		pattern=re.compile('<div\sclass="f18 mb20">(.*?)</div>',re.S)
		content_list=pattern.findall(html)

		#呼叫dealpage()替換掉段子裡的雜七雜八
		self.dealpage(content_list)

	def dealpage(self,content_list):
		"""處理爬來的頁面中的段子
		content_list:每頁的段子列表集合"""
		print u"正在處理頁面......"

		for item in content_list:
		#將集合中的每個段子進行處理,替換掉多餘的符號
			item=item.replace("<p>","").replace("</p>","").replace("<br>","").replace("<br />","")
			self.writepage(item)

	def writepage(self,item):
		"""把每一條段子寫入檔案裡
		item:處理後的每一條段子"""
		print u"正在儲存段子"
#寫入檔案內
		with open("duanzi.txt","a") as f:#a是可讀可寫,要是用w的話,duanzi.txt中的內容每次都會被下一個覆蓋
			f.write(item)

	def duanzispilder(self):
		"""控制爬蟲的進行"""
		while(self.switch):
			self.loadpage()
			command=raw_input(("如果繼續爬取,請輸入回車(退出輸入quit)").encode("gb18030"))
			if command=="quit":
				self.switch=False#變成False就可以結束爬取
			self.page+=1#page自加
		print u"謝謝使用...."

if __name__=="__main__":
	we=spilder()
	we.duanzispilder()

相關文章