一、scrapy爬虫框架——概念作用和工作流程 scrapy的入门使用
scrapy的概念和流程
學習目標:
1. scrapy的概念
Scrapy是一個Python編寫的開源網絡爬蟲框架。它是一個被設計用于爬取網絡數據、提取結構性數據的框架。
Scrapy 使用了Twisted['tw?st?d]異步網絡框架,可以加快我們的下載速度。
Scrapy文檔地址:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
2. scrapy框架的作用
少量的代碼,就能夠快速的抓取
3. scrapy的工作流程
3.1 回顧之前的爬蟲流程
3.2 上面的流程可以改寫為
3.3 scrapy的流程
其流程可以描述如下:
注意:
- 圖中中文是為了方便理解后加上去的
- 圖中綠色線條的表示數據的傳遞
- 注意圖中中間件的位置,決定了其作用
- 注意其中引擎的位置,所有的模塊之前相互獨立,只和引擎進行交互
3.4 scrapy的三個內置對象
- request請求對象:由url method post_data headers等構成
- response響應對象:由url body status headers等構成
- item數據對象:本質是個字典
3.5 scrapy中每個模塊的具體作用
注意:
- 爬蟲中間件和下載中間件只是運行邏輯的位置不同,作用是重復的:如替換UA等
小結
引擎(engine):負責數據和信號在不腰痛模塊間的傳遞
調度器(scheduler):實現一個隊列,存放引擎發過來的request請求對象
下載器(downloader):發送引擎發過來的request請求,獲取響應,并將響應交給引擎
爬蟲(spider):處理引擎發過來的response,提取數據,提取url,并交給引擎
管道(pipeline):處理引擎傳遞過來的數據,比如存儲
下載中間件(downloader middleware):可以自定義的下載擴展,比如設置代理ip
爬蟲中間件(spider middleware):可以自定義request請求和進行response過濾,與下載中間件作用重復
二、scrapy的入門使用
學習目標:
1 安裝scrapy
命令:
????sudo apt-get install scrapy
或者:
????pip/pip3 install scrapy
2 scrapy項目開發流程
????scrapy startproject mySpider
????scrapy genspider itcast itcast.cn
????根據網站結構在spider中實現數據采集相關內容
????使用pipeline進行數據后續處理和保存
3. 創建項目
通過命令將scrapy項目的的文件生成出來,后續步驟都是在項目文件中進行相關操作,下面以抓取傳智師資庫來學習scrapy的入門使用:http://www.itcast.cn/channel/teacher.shtml
創建scrapy項目的命令:
????scrapy startproject <項目名字>
示例:
????scrapy startproject myspider
生成的目錄和文件結果如下:
4. 創建爬蟲
通過命令創建出爬蟲文件,爬蟲文件為主要的代碼作業文件,通常一個網站的爬取動作都會在爬蟲文件中進行編寫。
命令:
????在項目路徑下執行:
????scrapy genspider <爬蟲名字> <允許爬取的域名>
爬蟲名字: 作為爬蟲運行時的參數
允許爬取的域名: 為對于爬蟲設置的爬取范圍,設置之后用于過濾要爬取的url,如果爬取的url與允許的域不通則被過濾掉。
示例:
cd myspiderscrapy genspider itcast itcast.cn生成的目錄和文件結果如下:
5. 完善爬蟲
在上一步生成出來的爬蟲文件中編寫指定網站的數據采集操作,實現數據提取
5.1 在/myspider/myspider/spiders/itcast.py中修改內容如下:
import scrapyclass ItcastSpider(scrapy.Spider): # 繼承scrapy.spider# 爬蟲名字 name = 'itcast' # 允許爬取的范圍allowed_domains = ['itcast.cn'] # 開始爬取的url地址start_urls = ['http://www.itcast.cn/channel/teacher.shtml']# 數據提取的方法,接受下載中間件傳過來的responsedef parse(self, response): # scrapy的response對象可以直接進行xpathnames = response.xpath('//div[@class="tea_con"]//li/div/h3/text()') print(names)# 獲取具體數據文本的方式如下# 分組li_list = response.xpath('//div[@class="tea_con"]//li') for li in li_list:# 創建一個數據字典item = {}# 利用scrapy封裝好的xpath選擇器定位元素,并通過extract()或extract_first()來獲取結果item['name'] = li.xpath('.//h3/text()').extract_first() # 老師的名字item['level'] = li.xpath('.//h4/text()').extract_first() # 老師的級別item['text'] = li.xpath('.//p/text()').extract_first() # 老師的介紹print(item)注意:
- scrapy.Spider爬蟲類中必須有名為parse的解析
- 如果網站結構層次比較復雜,也可以自定義其他解析函數
- 在解析函數中提取的url地址如果要發送請求,則必須屬于allowed_domains范圍內,但是start_urls中的url地址不受這個限制,我們會在后續的課程中學習如何在解析函數中構造發送請求
- 啟動爬蟲的時候注意啟動的位置,是在項目路徑下啟動
- parse()函數中使用yield返回數據,注意:解析函數中的yield能夠傳遞的對象只能是:BaseItem, Request, dict, None
5.2 定位元素以及提取數據、屬性值的方法
解析并獲取scrapy爬蟲中的數據: 利用xpath規則字符串進行定位和提取
5.3 response響應對象的常用屬性
- response.url:當前響應的url地址
- response.request.url:當前響應對應的請求的url地址
- response.headers:響應頭
- response.requests.headers:當前響應的請求頭
- response.body:響應體,也就是html代碼,byte類型
- response.status:響應狀態碼
6 保存數據
利用管道pipeline來處理(保存)數據
6.1 在pipelines.py文件中定義對數據的操作
6.2 在settings.py配置啟用管道
ITEM_PIPELINES = {'myspider.pipelines.ItcastPipeline': 400 }配置項中鍵為使用的管道類,管道類使用.進行分割,第一個為項目目錄,第二個為文件,第三個為定義的管道類。
配置項中值為管道的使用順序,設置的數值約小越優先執行,該值一般設置為1000以內。
7. 運行scrapy
命令:在項目目錄下執行scrapy crawl <爬蟲名字>
示例:scrapy crawl itcast
小結
總結
以上是生活随笔為你收集整理的一、scrapy爬虫框架——概念作用和工作流程 scrapy的入门使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七、matplotlib的使用
- 下一篇: React中的CSS——styled-c