Scrapy官方文件筆記
阿新 • • 發佈:2018-12-13
1.建立Scrapy專案
首先用cmd命令列去操作,輸入
scrapy startproject 專案名
#這裡輸入的專案名,就是在你輸入的目錄它會建立一個新的資料夾,這個資料夾裡面還是同樣名字的一個資料夾,專案新建的時候其實裡面只有一個,後來的.idea是被pycharm開啟之後pycharm生成的。
那這一步其實也就是決定了資料夾名字,以及在命令欄中決定根目錄。
2.然後用pycharm開啟這個專案,從根目錄開啟,在spiders裡面新建一個python檔案,從這裡開始。
3.
import scrapy class mingyan(scrapy.Spider): # 需要繼承scrapy.Spider類,類名隨意後面不用 name = "Scrapy_test" # 定義蜘蛛名,這個重要,根據這個啟動的,在這裡面寫清楚用來爬什麼的 def start_requests(self): # 由此方法通過下面連結爬取頁面 # 定義爬取的連結 urls = [ 'http://lab.scrapyd.cn/page/1/', 'http://lab.scrapyd.cn/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) # 爬取到的頁面如何處理?提交給parse方法處理 def parse(self, response): ''' start_requests已經爬取到頁面,那如何提取我們想要的內容呢?那就可以在這個方法裡面定義。 這裡的話,並木有定義,只是簡單的把頁面做了一個儲存,並沒有涉及提取我們想要的資料,後面會慢慢說到 也就是用xpath、正則、或是css進行相應提取,這個例子就是讓你看看scrapy執行的流程: 1、定義連結; 2、通過連結爬取(下載)頁面; 3、定義規則,然後提取資料; 就是這麼個流程,似不似很簡單呀? ''' page = response.url.split("/")[-2] # 根據上面的連結提取分頁,如:/page/1/,提取到的就是:1 filename = 'mingyan-%s.html' % page # 拼接檔名,如果是第一頁,最終檔名便是:mingyan-1.html with open(filename, 'wb') as f: # python檔案操作,不多說了; f.write(response.body) # 剛才下載的頁面去哪裡了?response.body就代表了剛才下載的頁面! self.log('儲存檔案: %s' % filename) # 打個日誌
上面這個程式解析
(1)格式化輸出那裡,%s是字串,%d是整數,首先在前面寫表示式的時候先用這個格式化代替,然後寫完了之後,在整個表示式後面%號一打,後面就跟著真正應該是的東西。
如果前面用了好多個%,那後面就是%( , , ) 用括號的形式來寫多項。
4. 執行爬蟲的辦法,就是在建立的根目錄那個檔案裡面使用命令列
scrapy crawl 爬蟲名
5. 起始url的第二種寫法,就是上面的第一個函式的替代形式
import scrapy class mingyan(scrapy.Spider): # 需要繼承scrapy.Spider類 name = "Scrapy_test" # 定義蜘蛛名 start_urls = [ # 另外一種寫法,無需定義start_requests方法 'http://lab.scrapyd.cn/page/1/', 'http://lab.scrapyd.cn/page/2/', ] def parse(self, response): ''' start_requests已經爬取到頁面,那如何提取我們想要的內容呢?那就可以在這個方法裡面定義。 這裡的話,並木有定義,只是簡單的把頁面做了一個儲存,並沒有涉及提取我們想要的資料,後面會慢慢說到 也就是用xpath、正則、或是css進行相應提取,這個例子就是讓你看看scrapy執行的流程: 1、定義連結; 2、通過連結爬取(下載)頁面; 3、定義規則,然後提取資料; 就是這麼個流程,似不似很簡單呀? ''' page = response.url.split("/")[-2] # 根據上面的連結提取分頁,如:/page/1/,提取到的就是:1 filename = 'mingyan-%s.html' % page # 拼接檔名,如果是第一頁,最終檔名便是:mingyan-1.html with open(filename, 'wb') as f: # python檔案操作,不多說了; f.write(response.body) # 剛才下載的頁面去哪裡了?response.body就代表了剛才下載的頁面! self.log('儲存檔案: %s' % filename) # 打個日誌
(1)開啟檔案進行操作的時候,括號裡面要寫上開啟檔案的檔名,逗號後面是操作模式,只讀還是讀寫,a+是從文字尾部開始新增。
用with open (檔名,處理模式) as f:
可以省掉關閉檔案的操作
(2)開啟頁面的過程就是上面的兩種方法,不管是用類裡面的一個變數還是自己寫一個函式,反正那一句或者那一段完了,開啟頁面的過程也就完了,
下面的parse是處理那個頁面的過程,而且他的接受引數括號裡面也有一個response引數,上面的寫url的就是request操作,而下面的是處理頁面的response操作,response在這個例子裡面是儲存頁面的操作。