python爬蟲之scrapy框架(對比之下,一切通俗易懂)
首先回顧一下常見的爬蟲的路線方法
- 首先,調用requests庫,根據url網址,獲取對應的網頁的html信息
- 然後,對爬取回來的html信息進行信息的搜索和採集
- 最後,將獲取的信息進行相關的操作,輸出或者保存
如下圖
# 獲取html的方法
def getHTMLtext(url):
return ""
# 將獲取的html信息提取,並將之填寫到對應的表格中
def fillUnivList(text):
univList = list()
return univList
# 將已經填寫好的數據進行輸出,num確定你要輸出的列表的項數
def printUnivList(alist,num):
print(alist)
# main方法,將所有方法進行統攬,進而形成一個完整的程序
def main():
url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2020.html"
text = getHTMLtext(url)
uniList = fillUnivList(text)
printUnivList(uniList,40)
# 總的調用
main()
- 概括一下,無非就散步
- 從url中下載html頁面
- 對html頁面進行分析和爬取
- 將爬取的結果進行相關操作
對應的scrapy框架
- 基本結構:5+2框架,5個模塊,2箇中間件
- Downloader:根據請求的url,下載對應的html網頁,相應的輸出的是response對象
- Spider:爬取獲得到html頁面,進行信息篩選,將輸入到的信息以item的形式輸出。但是,一個scrapy是網站級的爬取軟件,很多的網址都在對應的html頁面中,所以還有可能返回對應的url爬取請求requests
- Item pipelines:對爬取的信息進行相關的操作,保存還是輸出。獲取Sipder的item對象,並對其進行相關的操作
- Engine:相當於一箇中轉站,用於協調各個部件發送信息的中專。把requests請求,發送給Spiders,讓其爬取。將response對象,發送給item pipeline進行加工。等等
- Scheduler:主要負責對所有的爬取請求進行調度管理,不要要用戶進行修改
數據流的三個路徑
- 路徑一:
- Engine從Spider出獲得爬取請求Requests
- Engine將爬取請求轉發給Scheduler,用於調度
- 路徑二:
- Engine從Scheduler處獲得下一個要爬取的請求
- Engine將爬取請求Requests發送給Downloader
- 爬取網頁之後,Downloader進行下載,形成相應的Response對象,通過中間件發給Engine
- Engine將收到的響應通過中間件發送給Spider處理
- 路徑三:
- Spider處理響應後產生爬取項Item和新的爬取請求Requests給Engine
- Engine將爬取項發送給Item Pipeline進行整理
- Engine將爬取請求發送給Scheduler進行下一次調度
- 綜上
- 用戶只需要將自己的爬取請求輸入到對應的Spider中,同時將自己對文件的加工請求寫入到對應的Item Pipeline中,所以一般使用scrapy框架都只修改Spider和Item Pipeline