1. 程式人生 > >Scrapy官方文件筆記

Scrapy官方文件筆記

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在這個例子裡面是儲存頁面的操作。