天天看點

Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用

(七)Scrapy爬蟲的基本使用

(1)Scrapy爬蟲的使用步驟

步驟1:建立一個工程和Spider模闆

步驟2:編寫Spider

步驟3:編寫Item Pipeline

步驟4:優化配置政策

(2)Scrapy爬蟲的資料類型

1.Request類

class scrapy.http.Request()
#Requests對象表示一個HTTP請求
#由Spider生成,由Downloader執行
           
屬性或方法 說明
.url Request對應的請求URL位址
.method 對應的請求方法,‘GET’ 'POST’等
.headers 字典類型風格的請求頭
.body 請求内容主體,字元串類型
.meta 使用者添加的擴充資訊,在Scrapy内部子產品間傳遞資訊使用
.copy() 複制該請求

2.Response類

class scrapy.http.Response()
#Response對象表示一個HTTP響應
#由Downloader生成,由Spider處理
           
屬性或方法 說明
.url Response對應的URL位址
.status HTTP狀态碼,預設是200
.headers Response對應的頭部資訊
.body Response對應的内容資訊,字元串類型
.flags 一組标記
.request 産生Response類型對應的Request對象
.copy() 複制該響應

3.Item類

class scrapy.item.Item()
#Item對象表示一個從HTML頁面中提取的資訊内容
#由Spider生成,由Item Pipeline處理
#Item類似字典類型,可以按照字典類型操作
           

(3)Scrapy測試工程示例

Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用

>産生步驟(1)

  • 建立一個Scrapy工程
  • 選取一個目錄(D:\scrapytest),然後執行如下指令:
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用
  • 生成的工程目錄
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用

>産生步驟(2)

  • 在工程中産生一個Scrapy爬蟲
  • 進入工程目錄(D:\scrapytest\python123demo),然後執行如下指令:
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用
  • 該指令的作用:
    • 生成一個名稱為demo的spider
    • 在spiders目錄下增加代碼檔案demo.py
    • 該指令僅用于生成demo.py,該檔案也可以手工生成

>産生步驟(3)

  • 配置産生的spider爬蟲
    1. 初始化URL位址
    2. 擷取頁面後的解析方式
# -*- coding: utf-8 -*-
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    # allowed_domains = ['python123.io']
    def start_requests(self):
        urls = ['http://python123.io/ws/demo.html']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    #parse()用于處理響應,解析内容形成字典,發現新的URL爬取請求
    def parse(self, response):
        fname = response.url.split('/')[-1]
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)

           

>産生步驟(4)

  • 運作爬蟲,擷取網頁
  • 在指令行執行如下指令:
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用
  • demo爬蟲被執行,捕獲頁面存儲在demo.html
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用

(4)yield關鍵字

  • 包含yield語句的函數式一個生成器
  • 生成器每次産生一個值(yield語句),函數被當機,被喚醒後再産生一個值
  • 生成器是一個不斷産生值的函數
    Scrapy爬蟲架構初探(七)Scrapy爬蟲的基本使用
  • 生成器相比一次列出所有内容的優勢:
    1. 更節省存儲空間
    2. 響應更迅速
    3. 使用更靈活

(5)Scrapy爬蟲提取資訊的方法

  • Scrapy爬蟲支援多種HTML資訊提取方法:
    • Beautiful Soup
    • lxml
    • re
    • Xpath Selector
    • CSS Selector
<HTML>.css('a::attr(href)').extract()
#a		:标簽名稱
#href	:标簽屬性
#CSS Selector由W3C組織維護并規範