步驟
1.創建工程和 Spider 模版
scrapy startproject 名稱
cd 名稱
scrapy genspider 爬蟲名稱 爬取的地址
進一步修改 spiders/爬蟲文件
2.編寫 Spider
配置 爬蟲文件
修改對返回頁面的處理
修改對新增URL爬取請求的處理
3.編寫 ITEM Pinpelines
配置 pipelines.py 文件
定義對爬取項(Seraped Item)的處理類
配置併發鏈接選項
settings.py
CONCURRENT_REQUESTS Downloader 最大併發請求下載數量,默認爲32
CONCURRENT_ITEMS Item Pinpeline 最大併發 ITEM 處理數量,默認100
CONCURRENT_REQUESTS_PER_DOMAIN 每一個目標域名最大的併發請求數量,默認8
CONCURRENT_REQUESTS_PER_IP 每一個目標IP最大併發請求數量,默認0,非0有效
requests vs Scrapy
相同點
二者均可以進行頁面請求和爬取,Python爬蟲的兩個重要技術路線
二者可用性都好,文檔豐富,入門簡單
二者都沒有處理js,提交表單,應對驗證碼等功能(可擴展)
全局命令
startproject
語法: scrapy startproject <project_name>
這個命令是scrapy最爲經常使用的命令之一,它將會在當前目錄下建立一個名爲 <project_name>的項目。
settings
語法: scrapy settings [options]
該命令將會輸出Scrapy默認設定,固然若是你在項目中運行這個命令將會輸出項目的設定值。
runspider
語法: scrapy runspider <spider_file.py>
在未建立項目的狀況下,運行一個編寫在Python文件中的spider。
shell
語法: scrapy shell [url]
以給定的URL(若是給出)或者空(沒有給出URL)啓動Scrapy shell。
例如,scrapy shell http://www.baidu.com將會打開百度URL,
而且啓動交互式命令行,能夠用來作一些測試。
fetch
語法: scrapy fetch <url>
使用Scrapy下載器(downloader)下載給定的URL,並將獲取到的內容送到標準輸出。簡單的來講,就是打印url的html代碼。
view
語法: scrapy view <url>
在你的默認瀏覽器中打開給定的URL,並以Scrapy spider獲取到的形式展示。 有些時候spider獲取到的頁面和普通用戶看到的並不相同,一些動態加載的內容是看不到的, 所以該命令能夠用來檢查spider所獲取到的頁面。
version
語法: scrapy version [-v]
輸出Scrapy版本。配合 -v 運行時,該命令同時輸出Python, Twisted以及平臺的信息。
--項目命令
crawl
語法: scrapy crawl <spider_name>
使用你項目中的spider進行爬取,即啓動你的項目。這個命令將會常常用到,咱們會在後面的內容中常常使用。
check
語法: crapy check [-l] <spider>
運行contract檢查,檢查你項目中的錯誤之處。
list
語法: scrapy list
列出當前項目中全部可用的spider。每行輸出一個spider。
genspider
語法: scrapy genspider [-t template] <name> <domain>
在當前項目中建立spider。該方法可使用提早定義好的模板來生成spider。您也能夠本身建立spider的源碼文件。
view使用瀏覽器打開網頁
scrapy view http://www.baidu.com
shell命令, 進入scrpay交互環境
#進入該url的交互環境
scrapy shell http://www.dmoz.org/Computers/Programming/Languages/Python/Books/
以後便進入交互環境
咱們主要使用這裏面的response命令, 例如可使用
response.xpath() #括號裏直接加xpath路徑
runspider命令用於直接運行建立的爬蟲, 並不會運行整個項目
scrapy runspider 爬蟲名稱
爲何Scrapy 採用命令行建立和運行爬蟲?
命令行(不是圖形界面)更容易自動化,合適腳本控制
本質上, Scrapy 是給程序員用的,功能(而不是界面)更重要
生成的工程目錄
python123demo/ 外層目錄
scrapy.cfg 部署 Scrapy 爬蟲的配置文件
python123demo/ Scrapy 框架的用戶自定義 python代碼
__init__.py 初始化腳本
items.py Items 代碼模版(繼承類)
middlewares.py Middlewares 代碼模版(繼承類)
pipelines.py Pipelines 代碼模版(繼承類)
settings.py Scrapy 爬蟲的配置文件
spiders/ Spiders 代碼模版目錄(繼承類)
__init__.py 初始文件,無需修改
__pycache__/ 緩存目錄,無需修改
parse() 用於處理響應,解析內容造成字典,發現新的URL爬取請求
Scrapy 爬蟲的數據類型
Request 類
class scrapy.http.Request()
Request 對象表示一個HTTP請求
由 Spider 生成,由 Downloader 執行
.url Request 對應的請求URL
.method 對應的請求方法,‘GET’'POST'等
.headers 字典類型風格的請求頭
.body 請求內容主體,字符串類型
.meta 用戶添加的擴展信息,在 Scrapy 內部,模塊間傳遞信息使用
.copy() 複製該請求
Response 類
class scrapy.http.Response()
Response 對象表示一個HTTP請求
由 Downloader 生成,由 Spider 執行
.url Response 對應的請求URL
.status HTTP 狀態碼,默認200
.headers Response 對應的頭部信息
.body Response 對應的內容信息,字符串類型
.flags 一組標記
.request 產生 Response 類型對應的 Response 對象
.copy() 複製該請求
Item 類
class scrapy.item.Request()
Item 對象表示一個從HTML頁面中提取的信息內容
由 Spider 生成,由 Item Pinpeline 執行
Item 相似字典類型,能夠按照字典類型操做
CSS Selector 的基本使用
<html>.css('a::attr(href)').extract()
Scrapy 爬蟲框架結構
Downloader Middleware
目的:實施 Engine,Scheduler,Downloader 之間進行用戶可配置的控制
功能:修改,丟棄,新增請求或響應
Spider
解析 Downloader 返回的響應 (Response)
產生爬取項 (scraped item)
產生額外的爬取請求 (Request)
Item Pinpelines
以流水線方式處理 Spider 產生的爬取項
有一組操做順序組成,相似流水線,每一個操做是一個 Item Pinpeline 類型
可能操做包括:清理,檢驗和查重爬取項中的HTML數據,將數據存儲到數據庫
須要用戶編寫配置代碼
Spider Middleware
目的:對請求和爬取項的再處理
功能:修改,丟棄,新增請求或爬取項
須要用戶編寫配置代碼
yield 關鍵字
yield 生成器
生成器是一個不斷產生值的函數
包含yield語句的函數是一個生成器
生成器每次產生一個值(yield語句),函數被凍結,被喚醒後在產生一個值
爲什麼要有生成器?
生成器相比一次列多全部內容的優點
更節省存儲空間
響應更迅速
使用更靈活