一個鹹魚的python爬蟲之路(五):scrapy 爬蟲框架

来源:http://www.cnblogs.com/franklv/archive/2017/06/17/7041015.html
-Advertisement-
Play Games

介紹一下scrapy 爬蟲框架 安裝方法 pip install scrapy 就可以實現安裝了。我自己用anaconda 命令為conda install scrapy。 1 Engine從Spider處獲得爬取請求(Request)2Engine將爬取請求轉發給Scheduler,用於調度 3 ...


介紹一下scrapy 爬蟲框架

安裝方法 pip install scrapy 就可以實現安裝了。我自己用anaconda 命令為conda install scrapy。

 

 

 

1 Engine從Spider處獲得爬取請求(Request)
2Engine將爬取請求轉發給Scheduler,用於調度

3 Engine從Scheduler處獲得下一個要爬取的請求
4 Engine將爬取請求通過中間件發送給Downloader
5 爬取網頁後,Downloader形成響應(Response)通過中間件發給Engine
6 Engine將收到的響應通過中間件發送給Spider處理Engine將爬取請求轉發給Scheduler,用於調度

7 Spider處理響應後產生爬取項(scraped Item)
和新的爬取請求(Requests)給Engine
8 Engine將爬取項發送給Item Pipeline(框架出口)
9 Engine將爬取請求發送給Scheduler

Engine控制各模塊數據流,不間斷從Scheduler處
獲得爬取請求,直至請求為空
框架入口:Spider的初始爬取請求
框架出口:Item Pipeline

 

 

 

 

 

 

Engine                                                                              
(1) 控制所有模塊之間的數據流
(2) 根據條件觸發事件
不需要用戶修改

Downloader
根據請求下載網頁
不需要用戶修改

Scheduler
對所有爬取請求進行調度管理
不需要用戶修改

Downloader Middleware
目的:實施Engine、Scheduler和Downloader
之間進行用戶可配置的控制
功能:修改、丟棄、新增請求或響應
用戶可以編寫配置代碼

Spider
(1) 解析Downloader返回的響應(Response)
(2) 產生爬取項(scraped item)
(3) 產生額外的爬取請求(Request)
需要用戶編寫配置代碼

Item Pipelines
(1) 以流水線方式處理Spider產生的爬取項
(2) 由一組操作順序組成,類似流水線,每個操
作是一個Item Pipeline類型
(3) 可能操作包括:清理、檢驗和查重爬取項中
的HTML數據、將數據存儲到資料庫
需要用戶編寫配置代碼

瞭解了基本概念之後我們開始寫第一個scrapy爬蟲吧。

首先要新建一個爬蟲項目scrapy startproject xxx(項目名)

這個爬蟲就簡單的爬取一個小說網站的書名與作者吧。

我們現在創建了爬蟲項目book現在來編輯他的配置

                                        二級book目錄下這些就是配置文件上面已經介紹過了,在修改這些之前

                                        我們現在一級book目錄下創建一個start.py 來用於scrapy爬蟲能在IDE里

                                         面運行。文件裡面寫下如下代碼。

                                       

                                         前兩個參數是固定的,第三個參數是你spider的名字

        

 

接下來我們就在items裡面填寫欄位:

然後在spider中創建爬蟲主程式book.py

我們要爬取的網站為http://book.km.com/

通過點擊網站不同種類小說會發現網站地址是http://book.km.com/+小說種類拼音.html

通過這個我們來寫讀取網頁的內容

得到這個之後我們通過parse 函數來解析所獲取的網頁並提取所需信息。

網頁分析提取數據是通過BeautifulSoup庫來的,這裡就略了。自己分析2333~

程式寫好我們要存儲所爬取的信息就要編輯Pipelines.py 了

這裡提供兩個保存方式

1保存為txt文本

2 存入資料庫

要讓這個成功運行我們還需要在setting.py中配置

ITEM_PIPELINES = {    'book.pipelines.xxx': 300,}
xxx為存儲方法的類名,想用什麼方法存儲就改成那個名字就好運行結果沒什麼看頭就略了
第一個爬蟲框架就這樣啦期末忙沒時間繼續完善這個爬蟲之後有時間將這個爬蟲完善成把小說內容等一起爬下來的程式再來分享一波。
附一個book的完整代碼:
import scrapy
from bs4 import BeautifulSoup
from book.items import BookItem


class Bookspider(scrapy.Spider):
    name = 'book'   #名字
    allowed_domains = ['book.km.com']  #包含了spider允許爬取的功能變數名稱(domain)列表(list)
    zurl='http://book.km.com/'

    def start_requests(self):
        D=['jushi','xuanhuan'] #數組裡麵包含了小說種類這裡列舉兩個有需要可以自己添加
        for i in D: #通過迴圈遍歷
            url=self.zurl+i+'.html'
            yield scrapy.Request(url, callback=self.parse)

    def parse(self, response):
        imf=BeautifulSoup(response.text,'lxml')
        b=imf.find_all('dl',class_='info')

        for i in b:
            bookname=i.a.string
            author = i.dd.span.string
            item = BookItem()
            item['name'] = bookname
            item['author'] = author

            yield item

 

 
 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目背景 蕾米莉亞的紅霧異變失敗後,很不甘心。 題目描述 經過上次失敗後,蕾米莉亞決定再次發動紅霧異變,但為了防止被靈夢退治,她決定將紅霧以奇怪的陣勢釋放。 我們將幻想鄉看做是一個n*m的方格地區,一開始沒有任何一個地區被紅霧遮蓋。蕾米莉亞每次站在某一個地區上,向東南西北四個方向各發出一條無限長的紅 ...
  • 一、線性表 原理:零個或多個同類數據元素的有限序列 原理圖: 特點 : 1、有序性 2、有限性 3、同類型元素 4、第一個元素無前驅,最後一個元素無後繼,中間的元素有一個前驅並且有一個後繼 線性表是一種邏輯上的數據結構,在物理上一般有兩種實現 順序實現和鏈表實現 二、基於數組的 線性表順序實現 原理 ...
  • 文件上傳 配置伺服器虛擬地址: 文件獲取與存儲 獲取伺服器虛擬目錄上的文件 文件獲取與存儲 獲取伺服器虛擬目錄上的文件 獲取伺服器虛擬目錄上的文件 ...
  • 文件編碼: ①gbk編碼:中文占用2個位元組,英文占用1個位元組 File類常用API的使用: file類的遍歷目錄 RomdonAccessFile基本操作 五、位元組流 ...
  • 裝飾器 裝飾器本質上是一個Python函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。 先看簡單例子: 現有一個新的需求,希望可以記錄下函數的運行時間,需要在代碼中計算時間的代碼: login()等多個函數也有類型的需求,怎麼做?若在每個函數內都寫一 ...
  • 題目背景 嘛,這道非常簡單的給大家提供信心的省選題洛谷居然沒有! 這麼簡單的題怎麼可以沒有! 給大家提升士氣是義不容辭的責任! 所以我就來補一下啦.. 值得一提的是,標程是我自己做的.. 很渣,因為數據很水所以能AC.. 大神勿噴.. 題目描述 有 m 個小組, n 個元素,每個元素屬於且僅屬於一個 ...
  • 數學操作符 字元串操作符 3種基本數據類型及其轉換函數 其他函數 ...
  • 題目描述 現在有一堆數字共N個數字(N<=10^6),以及一個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動一個單位,求出每次滑動後視窗中的最大值和最小值。 例如: The array is [1 3 -1 -3 5 3 6 7], and k = 3. 輸入輸出格式 輸入格式: 輸入一共有兩 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...