scrapy1-安裝及創建第一個項目
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)
引擎打開一個網站(open a domain),找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度。
引擎向調度器請求下一個要爬取的URL。
調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給引擎。
引擎從下載器中接收到Response並通過Spider中間件(輸入方向)發送給Spider處理。
Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。
(從第二步)重復直到調度器中沒有更多地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-安裝及創建第一個項目