Scrapy框架總結(jié)

文件目錄說明:

scrapy.cfg: 項目的配置文件

tutorial/: 該項目的python模塊翩活。之后您將在此加入代碼。

tutorial/items.py: 項目中的item文件.

tutorial/pipelines.py: 項目中的pipelines文件.

tutorial/settings.py: 項目的設(shè)置文件.

tutorial/spiders/: 放置spider代碼的目錄.

定義item

Item 是保存爬取到的數(shù)據(jù)的容器惊暴;其使用方法和python字典類似, 并且提供了額外保護機制來避免拼寫錯誤導(dǎo)致的未定義字段錯誤。

示例代碼:

import scrapy

class DmozItem(scrapy.Item):

? ? title = scrapy.Field()

? ? link = scrapy.Field()

? ? desc = scrapy.Field()

定義spider

name: 用于區(qū)別Spider焰轻。 該名字必須是唯一的数苫,您不可以為不同的Spider設(shè)定相同的名字聪舒。

start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此虐急,第一個被獲取到的頁面將是其中之一箱残。 后續(xù)的URL則從初始的URL獲取到的數(shù)據(jù)中提取。

parse() :是spider的一個方法。 被調(diào)用時被辑,每個初始URL完成下載后生成的 Response 對象將會作為唯一的參數(shù)傳遞給該函數(shù)燎悍。 該方法負(fù)責(zé)解析返回的數(shù)據(jù)(response data),提取數(shù)據(jù)(生成item)以及生成需要進一步處理的URL的 Request 對象盼理。

示例代碼:

import scrapy

class DmozSpider(scrapy.Spider):

? ? name = "dmoz"

? ? allowed_domains = ["dmoz.org"]

? ? start_urls = [

? ? ? ? "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",

? ? ? ? "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"

? ? ]

? ? def parse(self, response):

? ? ? ? filename = response.url.split("/")[-2]

? ? ? ? with open(filename, 'wb') as f:

? ? ? ? ? ? f.write(response.body)

Scrapy提供了一個 item pipeline 谈山,來下載屬于某個特定項目的圖片,比如宏怔,當(dāng)你抓取產(chǎn)品時奏路,也想把它們的圖片下載到本地。

這條管道臊诊,被稱作圖片管道鸽粉,在 ImagesPipeline 類中實現(xiàn),提供了一個方便并具有額外特性的方法抓艳,來下載并本地存儲圖片

使用圖片管道

示例代碼:

import scrapy

from scrapy.contrib.pipeline.images import ImagesPipeline

from scrapy.exceptions import DropItem

class MyImagesPipeline(ImagesPipeline):

? ? def get_media_requests(self, item, info):

? ? ? ? for image_url in item['image_urls']:

? ? ? ? ? ? yield scrapy.Request(image_url)

? ? def item_completed(self, results, item, info):

? ? ? ? image_paths = [x['path'] for ok, x in results if ok]

? ? ? ? if not image_paths:

? ? ? ? ? ? raise DropItem("Item contains no images")

? ? ? ? item['image_paths'] = image_paths

? ? ? ? return item

配置修改

開啟圖片管道

ITEM_PIPELINES = {'scrapy.contrib.pipeline.images.ImagesPipeline': 1}

指定路徑

IMAGES_STORE = '/path/to/valid/dir'

main文件編寫

當(dāng)我們使用scrapy編寫一個爬蟲工程后潜叛,想要對工程進行斷點調(diào)試,和內(nèi)部運行一般我們會定義一個main.py文件壶硅,

以運行jobbole為例威兜,編寫main.py 文件代碼。

from scrapy.cmdline import execute

import sys

import os

#設(shè)置工程目錄

sys.path.append(os.path.dirname(os.path.abspath(__file__)))

#啟動命令

execute(['scrapy','crawl','jobbole'])

下載器中間件是介于Scrapy的request/response處理的鉤子框架庐椒。 是用于全局修改Scrapy request和response的一個輕量椒舵、底層的系統(tǒng)。

激活下載中間件

DOWNLOADER_MIDDLEWARES = {

? ? 'myproject.middlewares.CustomDownloaderMiddleware': 543,

}

爬蟲settings.py文件

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

# Scrapy settings for tutorial project

#

# For simplicitv, this file contains only settings considered important or

# commonly used. You can find more settings consulting the documentation:

#

#? ? https://doc.scrapy.org/en/latest/topics/settings.html

#? ? https://doc.scrapy.org/en/latest/topics/downloader-middleware.html

#? ? https://doc.scrapy.org/en/latest/topics/spider-middleware.html

BOT_NAME = 'tutorial'#爬蟲項目的名稱

SPIDER_MODULES = ['tutorial.spiders']#爬蟲文件目錄

NEWSPIDER_MODULE = 'tutorial.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent

#用戶的代理约谈,設(shè)置用戶代理的目的是為了模擬瀏覽器發(fā)起請求

#USER_AGENT = 'tutorial (+http://www.yourdomain.com)'

# Obey robots.txt rules

#是否要遵守robot協(xié)議 默認(rèn)為true表示遵守 通常設(shè)置為false

ROBOTSTXT_OBEY = True

# Configure maximum concurrent requests performed by Scrapy (default: 16)

#下載器允許發(fā)起請求的最大并發(fā)數(shù)? 默認(rèn)情況下是16

#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)

# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay

# See also autothrottle settings and docs

#下載延時 同一個網(wǎng)站上一個請求和下一個請求之間的間隔時間

DOWNLOAD_DELAY = 3

# The download delay setting will honor only one of:

#在某一個域下? 允許的最大并發(fā)請求數(shù)量默認(rèn)8

#CONCURRENT_REQUESTS_PER_DOMAIN = 16

#對于單個ip下允許最大的并發(fā)請求數(shù)量 默認(rèn)為0 為零表示不限制

#特殊點:如果非零? 上面設(shè)置的針對于域的設(shè)置就會不再生效了

#這個時候并發(fā)的限制就會針對與ip而不會針對與網(wǎng)站

#特殊點:如果它非零? 我們下載延時不在是針對網(wǎng)站了 而是針對于ip了

#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)

#針對于cookies設(shè)置一般情況下? 我們不攜帶cookies 也是反反爬的一個手段? 默認(rèn)為True

#COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)

#scrapy攜帶的一個終端擴展插件? telent作用:它能夠打印日志信息 監(jiān)聽爬蟲的爬取狀態(tài)信息

TELNETCONSOLE_ENABLED = False

# Override the default request headers:

#默認(rèn)的請求頭? 他是一個全局的

DEFAULT_REQUEST_HEADERS = {

? # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

? # 'Accept-Language': 'en',

}

# Enable or disable spider middlewares

# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html

#爬蟲中間件? 我們可以在這里做一些爬蟲自定義的擴展

#SPIDER_MIDDLEWARES = {

#? ? 'tutorial.middlewares.TutorialSpiderMiddleware': 543,

#}

# Enable or disable downloader middlewares

# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html

#下載中間件? 一般自定義下載中間件可以在這里激活? ? 后面的數(shù)字表示優(yōu)先級? 數(shù)字越小優(yōu)先級越高

#DOWNLOADER_MIDDLEWARES = {

#? ? 'tutorial.middlewares.TutorialDownloaderMiddleware': 543,

#}

# Enable or disable extensions

# See https://doc.scrapy.org/en/latest/topics/extensions.html

#scrapy的擴展? 擴展信息

#EXTENSIONS = {

#? ? 'scrapy.extensions.telnet.TelnetConsole': None,

#}

# Configure item pipelines

# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html

#在這里激活管道文件? ? 管道文件后面同樣跟了數(shù)字表示優(yōu)先級 數(shù)字越小表示優(yōu)先級越高

ITEM_PIPELINES = {

}

#寫入圖片的保存路徑

IMAGES_STORE = '/path/to/valid/dir'

#設(shè)置自動限速的擴展? 彌補上面的不足? 可以自動調(diào)整scrapy的下載時間? 時間延時

#

# Enable and configure the AutoThrottle extension (disabled by default)

# See https://doc.scrapy.org/en/latest/topics/autothrottle.

# The initial download delay

# The maximum download delay to be set in case of high latencies

#在高延遲情況下最大的下載延遲(單位秒)

AUTOTHROTTLE_MAX_DELAY = 60

# each remote server

# Enable showing throttling stats for every response received:

#起用AutoThrottle調(diào)試(debug)模式笔宿,展示每個接收到的response±庥眨可以通過此來查看限速參數(shù)是如何實時被調(diào)整的泼橘。

AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)

# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings

#是否啟用緩存策略

HTTPCACHE_ENABLED = True

#緩存超時時間

HTTPCACHE_EXPIRATION_SECS = 0

#緩存保存路徑

HTTPCACHE_DIR = 'httpcache'

#緩存忽略的Http狀態(tài)碼

HTTPCACHE_IGNORE_HTTP_CODES = []

# 緩存存儲的插件

HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

Linux下scrapy框架命令使用

創(chuàng)建一個爬蟲項目:scrapy startproject 爬蟲的項目名稱

注意:創(chuàng)建爬蟲文件要在spiders文件下

創(chuàng)建爬蟲文件:scrapy genspider 爬蟲文件名稱 爬蟲的域

運行爬蟲的名稱:scrapy crawl 爬蟲文件名稱

創(chuàng)建crawlspider爬蟲文件:scrapy genspider –t crawl jobbole xxxxx.cn

未啟動爬蟲調(diào)試命令:scrapy shell 'http://www.xxxxxxx.cn/xxx/xxx'

scrapy框架安裝方式:

ubuntu系統(tǒng)下:sudo pip3 install scrapy

如果安裝不成功可嘗試安裝一下依賴環(huán)境

sudo apt-get install python3-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市迈勋,隨后出現(xiàn)的幾起案子炬灭,更是在濱河造成了極大的恐慌,老刑警劉巖靡菇,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件重归,死亡現(xiàn)場離奇詭異,居然都是意外死亡厦凤,警方通過查閱死者的電腦和手機鼻吮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來较鼓,“玉大人椎木,你說我怎么就攤上這事。” “怎么了香椎?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵漱竖,是天一觀的道長。 經(jīng)常有香客問我士鸥,道長闲孤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任烤礁,我火速辦了婚禮讼积,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脚仔。我一直安慰自己勤众,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布鲤脏。 她就那樣靜靜地躺著们颜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猎醇。 梳的紋絲不亂的頭發(fā)上窥突,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音硫嘶,去河邊找鬼阻问。 笑死,一個胖子當(dāng)著我的面吹牛沦疾,可吹牛的內(nèi)容都是我干的称近。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哮塞,長吁一口氣:“原來是場噩夢啊……” “哼刨秆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忆畅,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衡未,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邻眷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眠屎,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年肆饶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岖常。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡驯镊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情板惑,我是刑警寧澤橄镜,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站冯乘,受9級特大地震影響洽胶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裆馒,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一姊氓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喷好,春花似錦、人聲如沸梗搅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽无切。三九已至荡短,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哆键,已是汗流浹背掘托。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洼哎,地道東北人烫映。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像噩峦,于是被迫代替她去往敵國和親锭沟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 明天是周五识补,它是一個很特殊的周五族淮,因為那一天我們將會有我們自己的第一次足球賽,和我們自己的第一次啦啦隊凭涂!足球是男生...
    劉沁靈的作品閱讀 509評論 5 3
  • 參加繪本講師培訓(xùn)在實操演練第一本繪本故事《我的連衣裙》是我講的的第一個繪本故事祝辣!特別喜歡這個繪本故事簡單歡快的節(jié)奏...
    宛凌閱讀 9,694評論 0 5
  • 啊哈哈哈哈,很好奇為什么我說第一個真正的暑假來了吧切油。嘻嘻蝙斜,因為工作快兩年了,過了兩個不像暑假的暑假咯澎胡。暑假的特點是...
    譞淚閱讀 421評論 0 3
  • 最深的思念孕荠,不是想得連呼吸都痛娩鹉,而是連想都不敢想。 最長的等待稚伍,不是在等待他的拒絕弯予,而是在等待自己死心。 最大的傷...
    刺猬貓閱讀 371評論 0 0
  • 北京新學(xué)道金泉書院 五年級尚喻班 王嘉盛 在北京新學(xué)道金泉書院有體育館个曙、食堂锈嫩、教學(xué)樓、操場垦搬。而同學(xué)們對操場更是情有...
    尚禮二班創(chuàng)作文集閱讀 259評論 0 1