scrapy介紹及使用

scrapy的流程

 

其流程能夠描述以下:python

  1. 調度器把requests-->引擎-->下載中間件--->下載器
  2. 下載器發送請求,獲取響應---->下載中間件---->引擎--->爬蟲中間件--->爬蟲
  3. 爬蟲提取url地址,組裝成request對象---->爬蟲中間件--->引擎--->調度器
  4. 爬蟲提取數據--->引擎--->管道
  5. 管道進行數據的處理和保存

注意:cookie

  • 圖中綠色線條的表示數據的傳遞
  • 注意圖中中間件的位置,決定了其做用
  • 注意其中引擎的位置,全部的模塊以前相互獨立,只和引擎進行交互

scrapy中每一個模塊的具體做用

 

 

 1.scrapy項目實現流程

  • 建立一個scrapy項目:scrapy startproject 項目名併發

  • 生成一個爬蟲:scrapy genspider 爬蟲名 容許爬取的範圍dom

  • 提取數據:完善spider,使用xpath等方法scrapy

  • 保存數據:pipeline中保存數據ide

2. 建立scrapy項目

命令:scrapy startproject +<項目名字>函數

示例:scrapy startproject myspiderurl

生成的目錄和文件結果以下:spa

 

 

settings.py中的重點字段和內涵3d

  • USER_AGENT 設置ua
  • ROBOTSTXT_OBEY 是否遵照robots協議,默認是遵照
  • CONCURRENT_REQUESTS 設置併發請求的數量,默認是16個
  • DOWNLOAD_DELAY 下載延遲,默認無延遲
  • COOKIES_ENABLED 是否開啓cookie,即每次請求帶上前一次的cookie,默認是開啓的
  • DEFAULT_REQUEST_HEADERS 設置默認請求頭
  • SPIDER_MIDDLEWARES 爬蟲中間件,設置過程和管道相同
  • DOWNLOADER_MIDDLEWARES 下載中間件

建立爬蟲

命令:scrapy genspider +<爬蟲名字> + <容許爬取的域名>

生成的目錄和文件結果以下:

完善spider

完善spider即經過方法進行數據的提取等操作:

注意:

  1. response.xpath方法的返回結果是一個相似list的類型,其中包含的是selector對象,操做和列表同樣,可是有一些額外的方法
  2. extract() 返回一個包含有字符串的列表
  3. extract_first() 返回列表中的第一個字符串,列表爲空沒有返回None
  4. spider中的parse方法必須有
  5. 須要抓取的url地址必須屬於allowed_domains,可是start_urls中的url地址沒有這個限制
  6. 啓動爬蟲的時候注意啓動的位置,是在項目路徑下啓動

 

數據傳遞到pipeline

爲何要使用yield?

  • 讓整個函數變成一個生成器,有什麼好處呢?
  • 遍歷這個函數的返回值的時候,挨個把數據讀到內存,不會形成內存的瞬間佔用太高
  • python3中的range和python2中的xrange同理

注意:

  • yield可以傳遞的對象只能是:BaseItem,Request,dict,None

6. 完善pipeline

 

 

 

 

pipeline在settings中可以開啓多個,爲何須要開啓多個?

  • 不一樣的pipeline能夠處理不一樣爬蟲的數據
  • 不一樣的pipeline可以進行不一樣的數據處理的操做,好比一個進行數據清洗,一個進行數據的保存

pipeline使用注意點

  • 使用以前須要在settings中開啓
  • pipeline在setting中鍵表示位置(即pipeline在項目中的位置能夠自定義),值表示距離引擎的遠近,越近數據會越先通過
  • 有多個pipeline的時候,process_item的方法必須return item,不然後一個pipeline取到的數據爲None值
  • pipeline中process_item的方法必須有,不然item沒有辦法接受和處理
  • process_item方法接受item和spider,其中spider表示當前傳遞item過來的spider
相關文章
相關標籤/搜索