(七)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測試工程示例
>産生步驟(1)
- 建立一個Scrapy工程
- 選取一個目錄(D:\scrapytest),然後執行如下指令:
- 生成的工程目錄
>産生步驟(2)
- 在工程中産生一個Scrapy爬蟲
- 進入工程目錄(D:\scrapytest\python123demo),然後執行如下指令:
- 該指令的作用:
- 生成一個名稱為demo的spider
- 在spiders目錄下增加代碼檔案demo.py
- 該指令僅用于生成demo.py,該檔案也可以手工生成
>産生步驟(3)
- 配置産生的spider爬蟲
- 初始化URL位址
- 擷取頁面後的解析方式
# -*- 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)
- 運作爬蟲,擷取網頁
- 在指令行執行如下指令:
- demo爬蟲被執行,捕獲頁面存儲在demo.html
(4)yield關鍵字
- 包含yield語句的函數式一個生成器
- 生成器每次産生一個值(yield語句),函數被當機,被喚醒後再産生一個值
- 生成器是一個不斷産生值的函數
- 生成器相比一次列出所有内容的優勢:
- 更節省存儲空間
- 響應更迅速
- 使用更靈活
(5)Scrapy爬蟲提取資訊的方法
- Scrapy爬蟲支援多種HTML資訊提取方法:
- Beautiful Soup
- lxml
- re
- Xpath Selector
- CSS Selector
<HTML>.css('a::attr(href)').extract()
#a :标簽名稱
#href :标簽屬性
#CSS Selector由W3C組織維護并規範