爬蟲實戰篇---糗事百科爬蟲(scrapy框架)


前言:目標確定

(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、最后運行爬蟲項目,得到目標結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM