1. 程式人生 > 程式設計 >python爬蟲排程器用法及例項程式碼

python爬蟲排程器用法及例項程式碼

我們一般使用爬蟲看到的都是最後的資料結果,對於整個的獲取過程沒有過多瞭解過。對於初學python的小夥伴們來說,不光是程式碼的練習,還是原理的分析都是必不可少的。

小編把整個爬取的過程分為了幾個部分,從一開始的下載,到資料的去重解析,再到整個爬蟲迴圈的結束,以圖片和程式碼的雙重形式展現給大家,希望能夠對爬蟲排程器有一個深刻的理解。

我們可以編寫幾個元件,每個元件完成一項功能,下圖中的藍底白字就是對這一流程的抽象:

python爬蟲排程器用法及例項程式碼

  • UrlManager:將儲存和獲取url以及url去重的幾個步驟在url管理器中完成(當然也可以針對每一步分別編寫相應的函式,但是這樣更直觀)。url管理器要有兩個url倉庫,一個儲存未爬取的url,一個儲存已爬取的url,除了倉庫之外,還應該具有一些完成特定功能的函式,如儲存url、url去重、從倉庫中挑選並返回一個url等
  • HtmlDownloader:將下載網頁內容的功能在HTML下載器中完成,下載器的功能較為單一,不多解釋。但從整個爬蟲的角度上來說,下載器是爬蟲的核心,在實際操作的過程中,下載器要和目標網站的各種反爬蟲手段鬥智鬥勇(各種表單、隱藏欄位和假連結、驗證碼、IP限制等等),這也是最耗費大腦的步驟
  • HtmlParser:解析提取資料的功能在HTML解析器中完成,解析器內的函式應該分別具有返回資料和新url的功能
  • DAtaOutput:儲存資料的功能由資料儲存器完成
  • SpiderMan:主迴圈由爬蟲排程器來完成,排程器為整個程式的入口,將其餘四個元件有序執行

爬蟲排程器將要完成整個迴圈,下面寫出python下爬蟲排程器的程式:

# coding: utf-8
new_urls = set()
data = {}
class SpiderMan(object):
 def __init__(self):
  #排程器內包含其它四個元件,在初始化排程器的時候也要建立四個元件物件的例項
  self.manager = UrlManager()
  self.downloader = HtmlDownloader()
  self.parser = HtmlParser()
  self.output = DataOutput()
 def spider(self,origin_url):
  #新增初始url
  self.manager.add_new_url(origin_url)
  #下面進入主迴圈,暫定爬取頁面總數小於100
  num = 0
  while(self.manager.has_new_url() and self.manager.old_url_size()<100):
   try:
    num = num + 1
    print "正在處理第{}個連結".format(num)
    #從新url倉庫中獲取url
    new_url = self.manager.get_new_url()
    #呼叫html下載器下載頁面
    html = self.downloader.download(new_url)
    #呼叫解析器解析頁面,返回新的url和data
    try:
     new_urls,data = self.parser.parser(new_url,html)
    except Exception,e:
     print e
    for url in new_urls:
     self.manager.add_new_url(url)
    #將已經爬取過的這個url新增至老url倉庫中
    self.manager.add_old_url(new_url)
    #將返回的資料儲存至檔案
     self.output.store_data(data)
     print "store data succefully"
    print "第{}個連結已經抓取完成".format(self.manager.old_url_size())
   except Exception,e:
    print e
  #爬取迴圈結束的時候將儲存的資料輸出至檔案
  self.output.output_html()

從整個迴圈的流程我們可以看出,由爬蟲排程器指揮四個元件完成資料的抓取、篩選、儲存流程,並以此為基礎還可以進行新的迴圈。看懂原理之後,我們就可以使用以上的程式碼進行實戰啦。

到此這篇關於python爬蟲排程器用法及例項程式碼的文章就介紹到這了,更多相關python爬蟲排程器是什麼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!