scrapy架構圖
製作scrapy爬蟲一共需要4步:
入門案例
目標:一、新建專案(scrapy startproject)
在開始爬取之前,必須建立乙個新的scrapy專案。進入自定義的專案目錄中,執行命令:
scrapy startrpoject myspider其中,myspider為專案名稱,可以看到將會建立乙個myspider資料夾,目錄結構大致如下:
scrapy.cfg:專案的配置檔案二、明確目標(myspider/items.py)myspider/:專案的python模組,將會從這裡引用**
myspider/items.py:專案的目標檔案
myspider/middlewares.py:專案的管道檔案
myspider/pipelines.py:專案的管道檔案
myspider/settings.py:專案的設定檔案
myspider/spiders/:儲存爬蟲**目錄
我們這裡以抓取: **裡的所有講師的姓名、職稱和個人資訊為例。
1.開啟myspider目錄下的items.py
2.item定義結構化資料字段,用來儲存爬取的資料,有點像python中的dict,但是提供了一些額外的保護以減少錯誤。
3.可以通過建立乙個scrapy.item類,並且定義型別為scrapy.field的類屬性來定義乙個item。
4.接下來,建立乙個itcastitem類和構建item模型(model)。
import scrapy三、製作爬蟲(spiders/itcastspider.py)class itcastitem(scrapy.item):
# define the fields for your item here like:
# 教師名
name = scrapy.field()
# 職稱
level = scrapy.field()
# 簡介
info = scrapy.field()
爬蟲功能要分兩步:
1.爬資料
在當前目錄下輸入命令,將在myspider/spider目錄下建立乙個名為itcast的爬蟲,並指定爬取域的範圍:
scrapy genspider itcast "itcast.cn"開啟myspider/spider目錄裡的itcast.py,預設增加了下列**:
import scrapy我們也可以自行建立itcast.py並編寫上面的**,只不過使用命令可以免雲編寫固定**的麻煩class itcastspider(scrapy.spider):
name = "itcast"
allowed_domains = ["itcast.cn"]
start_urls = (
'',)
def parse(self, response):
pass
要建立乙個spider,你必須用scrapy.spider類建立乙個子類,並確定了三個強制的屬性和乙個方法。
name = "":這個爬蟲的識別名稱,必須是唯一的,在不同的爬蟲必須定義不同的名字。將start_urls的值修改為需要爬取的第乙個urlallow_domains = :是搜尋的網域名稱範圍,也就是爬蟲的約束區域,規定爬蟲只爬取這個網域名稱下的網頁,不存在的url會被忽略。
1.負責解析返回的網頁資料(response.body),提取結構化資料(生成item)
start_urls = ("channel/teacher/shtml",)2.取資料或start_urls = ["channel/teacher/shtml"]
爬取整個網頁完畢,接下來的就是取的過程了,首先觀察頁面原始碼:
則parse函式**如下:
def parse(self, response):item pipelineitem = 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在spider中被收集之後,它將會被傳遞到item pipeline,這些item pipeline元件按定義的順序處理item。
每個item pipeline都是實現了簡單方法的python類,比如決定此item是丟棄而儲存。以下是item pipeline的一些典型應用:
驗證爬取的資料(檢查item包含某些字段,比如說name欄位)
查重將爬取結果儲存到檔案或者資料庫中
編寫item pipeline很簡單,item pipeline元件是乙個獨立的python類,其中process_item()方法必須實現:
# -*- coding: utf-8 -*-啟用乙個item pipeline元件# 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元件,必須將它的類新增到settings.py檔案item_pipelines配置,就像下面這個例子:
# configure item pipelines分配組每個類的整型值,確定了他們執行的順序,item按數字從低到高的順序,通過pipeline,通常將這些數字定義在0-1000範圍內(0-1000隨意設定,數值越低,元件的優先順序越高)# see
item_pipelines =
啟動爬蟲
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...