1. 程式人生 > >聽說你想爬女神?會Scrapy之後,基本全網的女神你都能弄到手!

聽說你想爬女神?會Scrapy之後,基本全網的女神你都能弄到手!

返回函數 itl select tin eba sel 管道 twisted PE

技術分享圖片

技術分享圖片

Scrapy主要包括了以下組件:

  • 引擎(Scrapy)

用來處理整個系統的數據流處理, 觸發事務(框架核心)

  • 調度器(Scheduler)

用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什麽, 同時去除重復的網址

  • 下載器(Downloader)

用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的)

技術分享圖片

Scrapy運行流程大概如下:

  1. 引擎從調度器中取出一個鏈接(URL)用於接下來的抓取
  2. 引擎把URL封裝成一個請求(Request)傳給下載器
  3. 下載器把資源下載下來,並封裝成應答包(Response)
  4. 爬蟲解析Response
  5. 解析出實體(Item),則交給實體管道進行進一步的處理
  6. 解析出的是鏈接(URL),則把URL交給調度器等待抓取
技術分享圖片

技術分享圖片

2.自動創建目錄的結果:

技術分享圖片

文件說明:

  • scrapy.cfg 項目的配置信息,主要為Scrapy命令行工具提供一個基礎的配置信息。(真正爬蟲相關的配置信息在settings.py文件中)
  • items.py 設置數據存儲模板,用於結構化數據,如:Django的Model
  • pipelines 數據處理行為,如:一般結構化的數據持久化
  • settings.py 配置文件,如:遞歸的層數、並發數,延遲下載等
  • spiders 爬蟲目錄,如:創建文件,編寫爬蟲規則
技術分享圖片

技術分享圖片

備註:

  1. 爬蟲文件需要定義一個類,並繼承scrapy.spiders.Spider
  2. 必須定義name,即爬蟲名,如果沒有name,會報錯。因為源碼中是這樣定義的:
技術分享圖片

3. 編寫函數parse,這裏需要註意的是,該函數名不能改變,因為Scrapy源碼中默認callback函數的函數名就是parse;

4. 定義需要爬取的url,放在列表中,因為可以爬取多個url,Scrapy源碼是一個For循環,從上到下爬取這些url,使用生成器叠代將url發送給下載器下載url的html。源碼截圖:

技術分享圖片

技術分享圖片

4、運行

進入p1目錄,運行命令

技術分享圖片

格式:scrapy crawl+爬蟲名 –nolog即不顯示日誌

技術分享圖片

技術分享圖片

註:urllib.urlretrieve(ab_src, file_path) ,接收文件路徑和需要保存的路徑,會自動去文件路徑下載並保存到我們指定的本地路徑。

6、遞歸爬取網頁

上述代碼僅僅實現了一個url的爬取,如果該url的爬取的內容中包含了其他url,而我們也想對其進行爬取,那麽如何實現遞歸爬取網頁呢?

示例代碼:

技術分享圖片

即通過yield生成器向每一個url發送request請求,並執行返回函數parse,從而遞歸獲取校花圖片和校花姓名學校等信息。

註:可以修改settings.py 中的配置文件,以此來指定“遞歸”的層數,如: DEPTH_LIMIT = 1

7、scrapy查詢語法中的正則:

技術分享圖片

語法規則:Selector(response=response查詢對象).xpath(‘//li[re:test(@class, “item-d*”)]//@href’).extract(),即根據re正則匹配,test即匹配,屬性名是class,匹配的正則表達式是”item-d*”,然後獲取該標簽的href屬性。

技術分享圖片

選擇器規則Demo

技術分享圖片

獲取響應cookie

更多選擇器規則:http://www.baby98.cn/

技術分享圖片

技術分享圖片

即:需要爬取所有url中的公司名,title,qq,基本信息info,更多信息more。

上述定義模板,以後對於從請求的源碼中獲取的數據同樣按照此結構來獲取,所以在spider中需要有一下操作:

技術分享圖片

上述代碼中:對url進行md5加密的目的是避免url過長,也方便保存在緩存或數據庫中。

此處代碼的關鍵在於:

  • 將獲取的數據封裝在了Item對象中
  • yield Item對象 (一旦parse中執行yield Item對象,則自動將該對象交個pipelines的類來處理)
技術分享圖片

上述代碼中多個類的目的是,可以同時保存在文件和數據庫中,保存的優先級可以在配置文件settings中定義。

技術分享圖片

總結:本文對python爬蟲框架Scrapy做了詳細分析和實例講解

進群:125240963 即可獲取源碼!

技術分享圖片

聽說你想爬女神?會Scrapy之後,基本全網的女神你都能弄到手!