爬蟲 Scrapy框架

2022-09-17 04:21:11 字數 4087 閱讀 6272

scrapy架構圖

製作scrapy爬蟲一共需要4步:

入門案例

目標:一、新建專案(scrapy startproject)

在開始爬取之前,必須建立乙個新的scrapy專案。進入自定義的專案目錄中,執行命令:

scrapy startrpoject myspider
其中,myspider為專案名稱,可以看到將會建立乙個myspider資料夾,目錄結構大致如下:

scrapy.cfg:專案的配置檔案

myspider/:專案的python模組,將會從這裡引用**

myspider/items.py:專案的目標檔案

myspider/middlewares.py:專案的管道檔案

myspider/pipelines.py:專案的管道檔案

myspider/settings.py:專案的設定檔案

myspider/spiders/:儲存爬蟲**目錄

二、明確目標(myspider/items.py)

我們這裡以抓取: **裡的所有講師的姓名、職稱和個人資訊為例。

1.開啟myspider目錄下的items.py

2.item定義結構化資料字段,用來儲存爬取的資料,有點像python中的dict,但是提供了一些額外的保護以減少錯誤。

3.可以通過建立乙個scrapy.item類,並且定義型別為scrapy.field的類屬性來定義乙個item。

4.接下來,建立乙個itcastitem類和構建item模型(model)。

import scrapy

class itcastitem(scrapy.item):

# define the fields for your item here like:

# 教師名

name = scrapy.field()

# 職稱

level = scrapy.field()

# 簡介

info = scrapy.field()

三、製作爬蟲(spiders/itcastspider.py)

爬蟲功能要分兩步:

1.爬資料

在當前目錄下輸入命令,將在myspider/spider目錄下建立乙個名為itcast的爬蟲,並指定爬取域的範圍:

scrapy genspider itcast "itcast.cn"
開啟myspider/spider目錄裡的itcast.py,預設增加了下列**:

import scrapy

class itcastspider(scrapy.spider):

name = "itcast"

allowed_domains = ["itcast.cn"]

start_urls = (

'',)

def parse(self, response):

pass

我們也可以自行建立itcast.py並編寫上面的**,只不過使用命令可以免雲編寫固定**的麻煩

要建立乙個spider,你必須用scrapy.spider類建立乙個子類,並確定了三個強制的屬性和乙個方法。

name = "":這個爬蟲的識別名稱,必須是唯一的,在不同的爬蟲必須定義不同的名字。

allow_domains = :是搜尋的網域名稱範圍,也就是爬蟲的約束區域,規定爬蟲只爬取這個網域名稱下的網頁,不存在的url會被忽略。

1.負責解析返回的網頁資料(response.body),提取結構化資料(生成item)

將start_urls的值修改為需要爬取的第乙個url

start_urls = ("channel/teacher/shtml",)

或start_urls = ["channel/teacher/shtml"]

2.取資料

爬取整個網頁完畢,接下來的就是取的過程了,首先觀察頁面原始碼:

則parse函式**如下:

def parse(self, response):

item = itcastspideritem()

for each in response.xpath("//div[@class='li_txt']"):

name = each.xpath("h3/text()").extract()

level = each.xpath("h4/text()").extract()

info = each.xpath("p/text()").extract()

item["name"] = name[0].strip()

item["level"] = level[0].strip()

item["info"] = info[0].strip()

yield item

item pipeline

當item在spider中被收集之後,它將會被傳遞到item pipeline,這些item pipeline元件按定義的順序處理item。

每個item pipeline都是實現了簡單方法的python類,比如決定此item是丟棄而儲存。以下是item pipeline的一些典型應用:

驗證爬取的資料(檢查item包含某些字段,比如說name欄位)

查重將爬取結果儲存到檔案或者資料庫中

編寫item pipeline很簡單,item pipeline元件是乙個獨立的python類,其中process_item()方法必須實現:

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

# define your item pipelines here

## don't forget to add your pipeline to the item_pipelines setting

# see:

import json

class itcastspiderpipeline(object):

def __init__(self):

self.file = open("傳智教師.json", "w", encoding = "utf-8")

self.first_flag = true

def process_item(self, item, spider):

if self.first_flag:

self.first_flag = false

content = "[\n" + json.dumps(dict(item), ensure_ascii = false)

else:

content = ",\n" + json.dumps(dict(item), ensure_ascii = false)

self.file.write(content)

return item

def close_spider(self, spider):

self.file.write("\n]")

self.file.close()

啟用乙個item pipeline元件

為了啟用item pipeline元件,必須將它的類新增到settings.py檔案item_pipelines配置,就像下面這個例子:

# configure item pipelines

# see

item_pipelines =

分配組每個類的整型值,確定了他們執行的順序,item按數字從低到高的順序,通過pipeline,通常將這些數字定義在0-1000範圍內(0-1000隨意設定,數值越低,元件的優先順序越高)

啟動爬蟲

scrapy crawl teacher
檢視本地磁碟是有生成傳智教師.json

scrapy爬蟲框架

作者經過幾周的python爬蟲實踐之後,深入學習了一下scrapy這個爬蟲框架,現將一些基本知識和 總結整理一下,以備後查。2.scrapy的命令列使用 這部分網上很多部落格都有總結,不需要背,理解會用主要的命令 startproject crawl fetch list genspider.即可,...

scrapy 爬蟲框架

1.安裝 公升級pip版本 pip install upgrade pip 通過pip安裝scrapy框架 pip install scrapy 安裝成功 只執行scrapy 進行測試是否安裝成功 2.scrapy startproject 爬蟲專案名稱 執行此命令,可以生成乙個爬蟲專案 會預先生成...

Scrapy爬蟲框架

scrapy中的各大元件及其功能 1.scrapy引擎 engine 引擎負責控制資料流在系統的所有元件中流動,並在相應動作發生時觸發事件。2.排程器 scheduler 排程器從引擎接收request並將它們入隊,以便之後引擎請求request時提供給引擎。4.spider。spider是scra...