Scrapy組件之item

Scrapy是一個流行的網絡爬蟲框架,從如今起將陸續記錄Python3.6下Scrapy整個學習過程,方便後續補充和學習。
Python網絡爬蟲之scrapy(一)已經介紹scrapy安裝、項目建立和測試基本命令操做,本文將對item設置、提取和使用進行詳細說明

item設置

  item是保存爬取到的數據的容器,其使用方式和字典相似,而且提供了額外保護機制來避免拼寫錯誤致使的未定義字段錯誤,定義類型爲scrapy.Field的類屬性來定義一個item,能夠根據本身的須要在items.py文件中編輯相應的itemcss

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html


#裝載咱們抓取數據的容器
import scrapy

class ExampleItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()    #屬性做爲Field對象
    population = scrapy.Field()

item提取

  首先回顧下建立的爬蟲模塊country.py,繼承scrapy.Spider,且定義了三個屬性html

  • name: 用於區別 Spider。 該名字必須是惟一的,您不能夠爲不一樣的 Spider 設定相同的名字
  • start_urls: 包含了 Spider 在啓動時進行爬取的 url 列表
  • parse() 是 spider 的一個方法。 被調用時,每一個初始 URL 完成下載後生成的 response對象將會做爲惟一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成 item)以及生成須要進一步處理的 URL 的 response對象。

  response經常使用屬性:content、text、status_code、cookiesweb

selector選擇器

  scrapy使用了一種基於xpath和css表達式機制:scrapy selector正則表達式

  selector方法

  • xpath(): 傳入 xpath 表達式,返回該表達式所對應的全部節點的 selector list 列表
  • css(): 傳入 CSS 表達式,返回該表達式所對應的全部節點的 selector list 列表
  • extract(): 序列化該節點爲 unicode 字符串並返回 list
  • re(): 根據傳入的正則表達式對數據進行提取,返回 unicode 字符串 list 列表

shell命令抓取

  scrapy提供了shell命令對網頁數據進行抓取shell

  命令格式:scrapy shell webapi

D:\Pystu\example>scrapy shell http://example.webscraping.com/places/default/view/Afghanistan-1

>>> response.xpath('//tr//td[@class="w2p_fw"]/text()').extract()
['647,500 square kilometres', '29,121,286', 'AF', 'Afghanistan', 'Kabul', '.af',
 'AFN', 'Afghani', '93', 'fa-AF,ps,uz-AF,tk']

item使用

1. item聲明

class ExampleItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()    #屬性做爲Field對象
    population = scrapy.Field(serializer=str)

  Field對象這麼了每一個字段的元數據(metadata),能夠爲每一個字段指明任何類型的元數據cookie

2. item建立

item = ExampleItem(name="Afghanistan",population="29121262")
        print (item)

3. item與字典轉換

  根據item建立字典網絡

>>> dict(ExampleItem) # create a dict from all populated values
{"name"="Afghanistan","population"="29121262"}

  根據字典建立item框架

>>> Product({"name"="Afghanistan","population"="29121262"})
Product(name="Afghanistan",population="29121262")
相關文章
相關標籤/搜索