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()