1. 程式人生 > 其它 >Scrapy入門使用

Scrapy入門使用

1.scrapy入門使用

學習目標:

  1. 掌握 scrapy的安裝
  2. 應用 建立scrapy的專案
  3. 應用 建立scrapy爬蟲
  4. 應用 執行scrapy爬蟲
  5. 應用 scrapy定位以及提取資料或屬性值的方法
  6. 掌握 response響應物件的常用屬性

1 安裝scrapy

命令:

sudo apt-get install scrapy

或者:

pip/pip3 install scrapy

2 scrapy專案開發流程

  1. 建立專案:scrapy startproject mySpider
  2. 生成一個爬蟲:scrapy genspider itcast itcast.cn
  3. 提取資料: 根據網站結構在spider
    中實現資料採集相關內容
  4. 儲存資料:使用pipeline進行資料後續處理和儲存

3. 建立專案

通過命令將scrapy專案的的檔案生成出來,後續步驟都是在專案檔案中進行相關操作,下面以抓取傳智師資庫來學習scrapy的入門使用:http://www.itcast.cn/channel/teacher.shtml

建立scrapy專案的命令:

scrapy startproject <專案名字>

示例:

scrapy startproject myspider

生成的目錄和檔案結果如下:

4. 建立爬蟲

通過命令創建出爬蟲檔案,爬蟲檔案為主要的程式碼作業檔案,通常一個網站的爬取動作都會在爬蟲檔案中進行編寫。

命令:

在專案路徑下執行:scrapy genspider <爬蟲名字> <允許爬取的域名>

爬蟲名字: 作為爬蟲執行時的引數

允許爬取的域名: 為對於爬蟲設定的爬取範圍,設定之後用於過濾要爬取的url,如果爬取的url與允許的域不通則被過濾掉。

示例:

    cd myspider
    scrapy genspider itcast itcast.cn

生成的目錄和檔案結果如下:

5. 完善爬蟲

在上一步生成出來的爬蟲檔案中編寫指定網站的資料採集操作,實現資料提取

5.1 在/myspider/myspider/spiders/itcast.py中修改內容如下:

import scrapy

class ItcastSpider(scrapy.Spider):  # 繼承scrapy.spider
  # 爬蟲名字 
    name = 'itcast' 
    # 允許爬取的範圍
    allowed_domains = ['itcast.cn'] 
    # 開始爬取的url地址
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']
    
    # 資料提取的方法,接受下載中介軟體傳過來的response
    def parse(self, response): 
      # scrapy的response物件可以直接進行xpath
      names = 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規則字串進行定位和提取

  1. response.xpath方法的返回結果是一個類似list的型別,其中包含的是selector物件,操作和列表一樣,但是有一些額外的方法
  2. 額外方法extract():返回一個包含有字串的列表
  3. 額外方法extract_first():返回列表中的第一個字串,列表為空沒有返回None

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檔案中定義對資料的操作

  1. 定義一個管道類

  2. 重寫管道類的process_item方法

  3. process_item方法處理完item之後必須返回給引擎

import json

class ItcastPipeline():
    # 爬蟲檔案中提取資料的方法每yield一次item,就會執行一次
    # 該方法為固定名稱函式
    def process_item(self, item, spider):
        print(item)
        return item

6.2 在settings.py配置啟用管道

ITEM_PIPELINES = {
    'myspider.pipelines.ItcastPipeline': 400
}

配置項中鍵為使用的管道類,管道類使用.進行分割,第一個為專案目錄,第二個為檔案,第三個為定義的管道類。

配置項中值為管道的使用順序,設定的數值約小越優先執行,該值一般設定為1000以內。

7. 執行scrapy

命令:在專案目錄下執行scrapy crawl <爬蟲名字>

示例:scrapy crawl itcast


小結

  1. scrapy的安裝:pip install scrapy
  2. 建立scrapy的專案: scrapy startproject myspider
  3. 建立scrapy爬蟲:在專案目錄下執行 scrapy genspider itcast itcast.cn
  4. 執行scrapy爬蟲:在專案目錄下執行
  5. 解析並獲取scrapy爬蟲中的資料:
    1. response.xpath方法的返回結果是一個類似list的型別,其中包含的是selector物件,操作和列表一樣,但是有一些額外的方法
    2. extract() 返回一個包含有字串的列表
    3. extract_first() 返回列表中的第一個字串,列表為空沒有返回None
  6. scrapy管道的基本使用:
    1. 完善pipelines.py中的process_item函式
    2. settings.py中設定開啟pipeline
  7. response響應物件的常用屬性
    1. response.url:當前響應的url地址
    2. response.request.url:當前響應對應的請求的url地址
    3. response.headers:響應頭
    4. response.requests.headers:當前響應的請求頭
    5. response.body:響應體,也就是html程式碼,byte型別
    6. response.status:響應狀態碼