scrapy介紹及使用
scrapy的流程
其流程可以描述如下:
- 調度器把requests–>引擎–>下載中間件—>下載器
- 下載器發送請求,獲取響應—->下載中間件—->引擎—>爬蟲中間件—>爬蟲
- 爬蟲提取url地址,組裝成request對象—->爬蟲中間件—>引擎—>調度器
- 爬蟲提取數據—>引擎—>管道
- 管道進行數據的處理和保存
注意:
- 圖中綠色線條的表示數據的傳遞
- 注意圖中中間件的位置,決定了其作用
- 注意其中引擎的位置,所有的模塊之前相互獨立,只和引擎進行交互
scrapy中每個模塊的具體作用
1.scrapy項目實現流程
-
創建一個scrapy項目:
scrapy startproject 項目名
-
生成一個爬蟲:
scrapy genspider 爬蟲名 允許爬取的範圍
-
提取數據:
完善spider,使用xpath等方法
-
保存數據:
pipeline中保存數據
2. 創建scrapy項目
命令:scrapy startproject +<項目名字>
示例:scrapy startproject myspider
生成的目錄和文件結果如下:
settings.py
中的重點字段和內涵
USER_AGENT
設置uaROBOTSTXT_OBEY
是否遵守robots協議,默認是遵守CONCURRENT_REQUESTS
設置併發請求的數量,默認是16個DOWNLOAD_DELAY
下載延遲,默認無延遲COOKIES_ENABLED
是否開啟cookie,即每次請求帶上前一次的cookie,默認是開啟的DEFAULT_REQUEST_HEADERS
設置默認請求頭SPIDER_MIDDLEWARES
爬蟲中間件,設置過程和管道相同DOWNLOADER_MIDDLEWARES
下載中間件
創建爬蟲
命令:scrapy genspider +<爬蟲名字> + <允許爬取的域名>
生成的目錄和文件結果如下:
完善spider
完善spider即通過方法進行數據的提取等操做:
注意:
response.xpath
方法的返回結果是一個類似list的類型,其中包含的是selector對象,操作和列表一樣,但是有一些額外的方法extract()
返回一個包含有字符串的列表extract_first()
返回列表中的第一個字符串,列表為空沒有返回None- spider中的parse方法必須有
- 需要抓取的url地址必須屬於allowed_domains,但是start_urls中的url地址沒有這個限制
- 啟動爬蟲的時候注意啟動的位置,是在項目路徑下啟動
數據傳遞到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
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!
※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!
※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!