前言:目標確定
(1)、創建項目
scrapy startproject qsbk
(2)、技術路線
scrapy框架的使用
(3)、創建爬蟲
scrapy genspider spider qiushibaike.com (爬蟲名不能與項目名重名)
(3)、實戰
改寫settings.py
設置請求頭模擬瀏覽器訪問行為
不遵從robots.txt行為
限定下載速度
啟用pipelines,如有多個pipelines,數字小表示優先級越高
改寫items.py
改寫pipelines.py
改寫spider.py
(5)、效果展示
我們本次一共抓取到了325條數據
(6)、總結(全爬蟲流程分析)
1、我們在spider中傳入了初始url,並通過引擎傳遞給scheduler調度隊列生成request請求並通過downloader middleware 進入downloader從互聯網上下載數據,返回一個response對象,response是一個scrapy.http.response.html.HtmlResponse對象,可以通過css和xpath語法來提取數據
2、提取出的數據是一個Selector or SelectorList對象,並通過downloader middle 經引擎傳遞給spider中的parse函數進行解析,我們通過getall()獲取了字符串文本,列表類型,get()方法返回第一個值,str類型,這里我們亦可使用extract()返回的是列表類型,extract_first()返回列表中的第一個值,str類型
3、解析后我們使用yield將函數轉換為一個生成器,不斷的從中抽數據,並傳遞給item pipeline進行處理
4、在item pipeline中我們使用了三個核心方法和初始化函數,首先打來數據(這里采用__init__,當然你可以在open_spider()中執行,接着使用核心方法process——item進行數據處理,最后使用了close_spider()方法關閉了打開的數據)
5、在保存json數據的時候可以使用JsonItemExporter和JsonLinesItemExporter這兩個類來進行
JsonItemExporter:每次將數據添加進內存最后寫入磁盤,好處:一個滿足json格式的數據。壞處:數據量較大時:內存占用較多(pipelines.py圖片2)
JsonLinesItemExporter:每次調用export_item的時候將數據存儲到內存,好處:每次直接將數據寫入硬盤,節省內存,適用於數據量較大的情況。壞處:不是一個滿足json格式的數據(pipelines.py圖片3)
6、最后運行爬蟲項目,得到目標結果