PySpider框架學習

不遷徙候鳥發表於2020-10-17

——利用Phantomjs和PySpider就可以抓取通過JavaScript渲染的網頁啦

先來解釋一下框架中的程式碼結構:

  定義一個Handler類,它繼承於父類BaseHandler,裡面包含三個函式:on_start()進入目標網站,返回索引頁html程式碼並傳給index_page();index_page()對索引頁html程式碼進行解析,返回解析結果並傳給detail_page();detail_page()對詳情頁進行解析便返回詳細資訊。   

 1 from pyspider.libs.base_handler import *
 2 
 3 class Handler(BaseHandler):
 4     crawl_config = {
 5     }
 6     
 7     @every(minutes=24*60)    # 表示on_start()每24h執行一次,就能抓取到最新網頁
 8     def on_start(self):
 9         # __start_url__為要爬取的目標網址,callback指定解析response的方法,即呼叫index_page()函式
10         self.crawl('__start_url__', callback=self.index_page)
11     
12     @config(age=10*24*60*60)    # 表示on_start()爬取的頁面十天內有效,不會再次進行爬取
13     def index_page(self, response):
14         # 內建封裝了PyQuery對response進行解析
15         for each in response.doc('a[href^="http"]').items():
16             self.crawl(each.attr.href, callback=self.detail_page)
17             
18             
19     def detail_page(self, response):  
20         return{
21             'url': response.url,
22             'title': response.doc('title').text()
23         }

注意:

  當@every和age同時被設定時,請求會每天被觸發一次,但是在有效週期(age)內,請求會被丟棄,只有過期才能重新啟動。

相關文章