1. 程式人生 > >scrapy1-安裝及創建第一個項目

scrapy1-安裝及創建第一個項目

lock 們的 img 之前 body 通過 inf cif info

https://zhuanlan.zhihu.com/p/24669128

技術分享圖片

架構概覽

各組件作用

Scrapy Engine

引擎負責控制數據流在系統中所有組件中流動,並在相應動作發生時觸發事件。 詳細內容查看下面的數據流(Data Flow)部分。

此組件相當於爬蟲的“大腦”,是整個爬蟲的調度中心。

調度器(Scheduler)

調度器從引擎接受request並將他們入隊,以便之後引擎請求他們時提供給引擎。

初始的爬取URL和後續在頁面中獲取的待爬取的URL將放入調度器中,等待爬取。同時調度器會自動去除重復的URL(如果特定的URL不需要去重也可以通過設置實現,如post請求的URL)

下載器(Downloader)

下載器負責獲取頁面數據並提供給引擎,而後提供給spider。

Spiders

Spider是Scrapy用戶編寫用於分析response並提取item(即獲取到的item)或額外跟進的URL的類。 每個spider負責處理一個特定(或一些)網站。

Item Pipeline

Item Pipeline負責處理被spider提取出來的item。典型的處理有清理、 驗證及持久化(例如存取到數據庫中)。

當頁面被爬蟲解析所需的數據存入Item後,將被發送到項目管道(Pipeline),並經過幾個特定的次序處理數據,最後存入本地文件或存入數據庫。

下載器中間件(Downloader middlewares)

下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。

通過設置下載器中間件可以實現爬蟲自動更換user-agent、IP等功能。

Spider中間件(Spider middlewares)

Spider中間件是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。

數據流(Data flow)

  1. 引擎打開一個網站(open a domain),找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。

  2. 引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度。

  3. 引擎向調度器請求下一個要爬取的URL。

  4. 調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。

  5. 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給引擎。

  6. 引擎從下載器中接收到Response並通過Spider中間件(輸入方向)發送給Spider處理。

  7. Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。

  8. 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。

  9. (從第二步)重復直到調度器中沒有更多地request,引擎關閉該網站。

1. 安裝scrapy

cmd 管理員權限進去

pip install scrapy 會出錯

用conda install scrapy 安裝,解決依賴關系,成功安裝

2.創建爬蟲項目

在桌面上創建一個Python_project文件夾

cmd 切換目錄到Python_project文件夾

在開始爬取之前,首先要創建一個新的Scrapy項目。這裏以爬取我的博客為例,進入你打算存儲代碼的目錄中,運行下列命令:

crapy startproject scrapyspider

然後就會生成scrapyspider文件到Python_project文件夾裏

該命令將會創建包含下列內容的scrapyspider目錄:

scrapyspider/
    scrapy.cfg
    scrapyspider/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

這些文件分別是:

  • scrapy.cfg: 項目的配置文件。
  • scrapyspider/: 該項目的python模塊。之後您將在此加入代碼。
  • scrapyspider/items.py: 項目中的item文件。
  • scrapyspider/pipelines.py: 項目中的pipelines文件。
  • scrapyspider/settings.py: 項目的設置文件。
  • scrapyspider/spiders/: 放置spider代碼的目錄。

技術分享圖片技術分享圖片

3.編寫第一個爬蟲(Spider)

Spider是用戶編寫用於從單個網站(或者一些網站)爬取數據的類。

其包含了一個用於下載的初始URL,如何跟進網頁中的鏈接以及如何分析頁面中的內容, 提取生成 item 的方法。

為了創建一個Spider,您必須繼承 scrapy.Spider 類, 且定義以下三個屬性:

  • name: 用於區別Spider。 該名字必須是唯一的,您不可以為不同的Spider設定相同的名字。
  • start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 後續的URL則從初始的URL獲取到的數據中提取。
  • parse() 是spider的一個方法。 被調用時,每個初始URL完成下載後生成的 Response 對象將會作為唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的 Request 對象。

以下為我們的第一個Spider代碼,保存在scrapyspider/spiders目錄下的blog_spider.py文件中:

技術分享圖片

from scrapy.spiders import Spider


class BlogSpider(Spider):
    name = ‘woodenrobot‘
    start_urls = [‘http://woodenrobot.me‘]

    def parse(self, response):
        titles = response.xpath(‘//a[@class="post-title-link"]/text()‘).extract()
        for title in titles:
            print title.strip()

  

4.啟動爬蟲

打開終端進入項目所在路徑(即:scrapyspider路徑下)運行下列命令:

scrapy crawl woodenrobot

 啟動爬蟲後就可以看到打印出來當前頁所有文章標題了。

技術分享圖片

scrapy1-安裝及創建第一個項目