摘要:用于下載網(wǎng)頁(yè)內(nèi)容,并將網(wǎng)頁(yè)內(nèi)容返回給。中間件位于引擎和下載器之間的鉤子框架,主要是處理引擎與下載器之間的請(qǐng)求及響應(yīng)。包含了在啟動(dòng)時(shí)進(jìn)行爬取的列表。對(duì)象經(jīng)過(guò)調(diào)度,執(zhí)行生成對(duì)象并送回給方法一般返回實(shí)例。
Scrapy 是什么
Scrapy 是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。
其最初是為了頁(yè)面抓取 (更確切來(lái)說(shuō), 網(wǎng)絡(luò)抓取 )所設(shè)計(jì)的, 也可以應(yīng)用在獲取 API 所返回的數(shù)據(jù)(例如 Amazon Associates Web Services ) 或者通用的網(wǎng)絡(luò)爬蟲。Scrapy 用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試。
現(xiàn)在最新版本為 1.0,同時(shí)支持 2.7.x 和 3.x。
官方網(wǎng)站
中文版document
Scrapy 架構(gòu)Scrapy 使用了 Twisted 異步網(wǎng)絡(luò)庫(kù)來(lái)處理網(wǎng)絡(luò)通訊, 整體架構(gòu)大致如下:
Scrapy 主要包括了以下組件:
Scrapy Engine:用來(lái)處理整個(gè)系統(tǒng)的數(shù)據(jù)流處理,觸發(fā)事務(wù)。
Scheduler:用來(lái)接受引擎發(fā)過(guò)來(lái)的請(qǐng)求,壓入隊(duì)列中,并在引擎再次請(qǐng)求的時(shí)候返回。
Downloader:用于下載網(wǎng)頁(yè)內(nèi)容,并將網(wǎng)頁(yè)內(nèi)容返回給 Spiders。
Spiders:Spiders 是主要干活的,用它來(lái)制訂特定域名或網(wǎng)頁(yè)的解析規(guī)則。
Item Pipeline:負(fù)責(zé)處理由 Spiders 從網(wǎng)頁(yè)中抽取的項(xiàng)目,它的主要任務(wù)是清晰、驗(yàn)證和存儲(chǔ)數(shù)據(jù)。當(dāng)頁(yè)面被 Spiders 解析后,將被發(fā)送到 Item Pipeline,并經(jīng)過(guò)幾個(gè)特定的次序處理數(shù)據(jù)。
Downloader 中間件:位于Scrapy引擎和下載器之間的鉤子框架,主要是處理 Scrapy 引擎與下載器之間的請(qǐng)求及響應(yīng)。
Spider 中間件:介于 Scrapy引擎和蜘蛛之間的鉤子框架,主要工作是處理蜘蛛的響應(yīng)輸入和請(qǐng)求輸出。
Scheduler 中間件:介于Scrapy引擎和調(diào)度之間的中間件,從Scrapy引擎發(fā)送到調(diào)度的請(qǐng)求和響應(yīng)。
使用Scrapy可以很方便的完成網(wǎng)上數(shù)據(jù)的采集工作,它為我們完成了大量的工作,而不需要自己費(fèi)大力氣去開發(fā)。
下載安裝pip install scrapyHello World 創(chuàng)建工程
在 cmd 下切換到想創(chuàng)建 scrapy 項(xiàng)目的地方,然后使用命名
scrapy startproject tutorial
注:tutorial 為工程名
然后就會(huì)發(fā)現(xiàn)在當(dāng)前位置會(huì)多出一個(gè)文件夾,名字是 tutorial。它的目錄結(jié)構(gòu)是這樣的:
tutorial/ scrapy.cfg tutorial/ spiders/ __init__.py __init__.py items.py pipelines.py settings.py
注:
scrapy.cfg 是該項(xiàng)目的全局配置文件
tutorial/: 該項(xiàng)目的python模塊。
tutorial/items.py: 項(xiàng)目中的item文件.
tutorial/pipelines.py: 項(xiàng)目中的pipelines文件.
tutorial/settings.py: 項(xiàng)目的設(shè)置文件.
tutorial/spiders/: 放置spider代碼的目錄.
Item 是保存爬取到的數(shù)據(jù)的容器;其使用方法和python字典類似。雖然您也可以在 Scrapy 中直接使用dict,但是 Item 提供了額外保護(hù)機(jī)制來(lái)避免拼寫錯(cuò)誤導(dǎo)致的未定義字段錯(cuò)誤。
這里這樣寫
# -*- coding: utf-8 -*- import scrapy class DmozItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field()
DmozItem 為該 Item 的名字, 該類是一個(gè) scrapy.Item 類。
我這里想獲取到的信息是 title、link 和 desc 這三個(gè)字段,它們都是 scrapy.Field 類型的。
在 tutorial/spiders/ 下創(chuàng)建一個(gè) py 文件 dmoz_spider.py,它是這樣定義的:
import scrapy from tutorial.items import DmozItem 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): sel = Selector(response) sites = sel.xpath("http://ul[@class="directory-url"]/li") for sel in sites: item = DmozItem() # 實(shí)例化一個(gè) DmozItem 類 item["title"] = sel.xpath("a/text()").extract() item["link"] = sel.xpath("a/@href").extract() item["desc"] = sel.xpath("text()").extract() yield item
爬蟲類必須繼承自 scrapy.Spider 類, 且定義一些屬性:
name: 用于區(qū)別 Spider。 該名字必須是唯一的,不可以為不同的 Spider 設(shè)定相同的名字。
start_urls: 包含了 Spider 在啟動(dòng)時(shí)進(jìn)行爬取的 url 列表。 因此,第一個(gè)被獲取到的頁(yè)面將是其中之一, 后續(xù)的URL則從初始的URL獲取到的數(shù)據(jù)中提取。
parse() 是 spider 的一個(gè)方法。 被調(diào)用時(shí),每個(gè)初始 URL 完成下載后生成的 Response 對(duì)象將會(huì)作為唯一的參數(shù)傳遞給該函數(shù)。 該方法負(fù)責(zé)解析返回的數(shù)據(jù)(response data),提取數(shù)據(jù)(生成 item )以及生成需要進(jìn)一步處理的 URL 的 Request 對(duì)象。scrapy 為 Spider 的 start_urls 屬性中的每個(gè)URL創(chuàng)建了 scrapy.Request 對(duì)象,并將 parse 方法作為回調(diào)函數(shù)(callback)賦值給了 Request。Request 對(duì)象經(jīng)過(guò)調(diào)度,執(zhí)行生成 scrapy.http.Response 對(duì)象并送回給 spider parse() 方法, 一般返回 Item 實(shí)例。
進(jìn)入該工程目錄,本例中就是 tutorial/, 在命令行執(zhí)行
scrapy crawl dmoz保存
可以使用如下命令
scrapy crawl dmoz -o items.json
該命令是說(shuō)將結(jié)果保存在 items.json 文件中。
常用的命令行工具# 創(chuàng)建項(xiàng)目 scrapy startproject myproject # 幫助信息 scrapy-h # 幫助信息 scrapy -h # 使用下載器下載指定的url,并將獲取到的內(nèi)容送到標(biāo)準(zhǔn)輸出 scrapy fetch # 在瀏覽器中打開給定的URL,并以Scrapy spider獲取到的形式展現(xiàn) scrapy view # 以給定的URL(如果給出)或者空(沒(méi)有給出URL)啟動(dòng)Scrapy shell scrapy shell [url] #在未創(chuàng)建項(xiàng)目的情況下,運(yùn)行一個(gè)編寫在Python文件中的spider scrapy runspider # 獲取Scrapy的設(shè)定 scrapy settings [options] -------------------------以上不需要項(xiàng)目,以下需要在項(xiàng)目中---------------------------------------- # 使用 template 模版來(lái)信創(chuàng)建一個(gè) spider, name 值為 , allowed_domains 值為 scrapy genspider [-t template] # 查看可用的模版,默認(rèn)有 basic、crawl、csvfeed 和 xmlfeed 4個(gè) scrapy genspider -l # 查看 TEMPLATE 信息 scrapy genspider -d TEMPLATE # 使用 進(jìn)行爬取數(shù)據(jù) scrapy crawl # 列出當(dāng)前項(xiàng)目中所有可用的 spider scrapy list # 運(yùn)行contract檢查。 scrapy check [-l] # 獲取給定的URL并使用相應(yīng)的spider分析處理,可以解析成自己寫的 item scrapy parse [options]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38320.html
摘要:安裝可能的問(wèn)題問(wèn)題解決實(shí)例教程中文教程文檔第一步創(chuàng)建項(xiàng)目目錄第二步進(jìn)入創(chuàng)建爬蟲第三步創(chuàng)建存儲(chǔ)容器,復(fù)制項(xiàng)目下的重命名為第四步修改提取數(shù)據(jù)引入數(shù)據(jù)容器第五步解決百度首頁(yè)網(wǎng)站抓取空白問(wèn)題設(shè)置設(shè)置用戶代理解決相關(guān)解決數(shù)據(jù)保存亂 pip 安裝 pip install scrapy 可能的問(wèn)題: 問(wèn)題/解決:error: Microsoft Visual C++ 14.0 is requi...
摘要:快速入門首先,初步要做的就是快速構(gòu)建一個(gè)爬蟲。然后把結(jié)果加入到一個(gè)隊(duì)列中。既然是入門,我們肯定是先關(guān)心我們需要的。 因?yàn)楣卷?xiàng)目需求,需要做一個(gè)爬蟲。所以我一個(gè)python小白就被拉去做了爬蟲。花了兩周時(shí)間,拼拼湊湊總算趕出來(lái)了。所以寫個(gè)blog做個(gè)記錄。 快速入門 首先,初步要做的就是快速構(gòu)建一個(gè)爬蟲。 配置環(huán)境 Mac下安裝 1) 直接從官網(wǎng)下載 python下載官網(wǎng) 2) 是通過(guò)...
摘要:本文基于,平臺(tái)完整項(xiàng)目代碼安裝安裝官網(wǎng)下載注意環(huán)境變量是否配置成功安裝為了安裝順利,請(qǐng)備好梯子安裝過(guò)程中注意以下報(bào)錯(cuò)信息解決辦法下載對(duì)應(yīng)版本的文件表示版本表示位下載后在文件目錄下執(zhí)行文件名創(chuàng)建項(xiàng)目創(chuàng)建創(chuàng)建在項(xiàng)目跟目錄執(zhí)行配置文件 本文基于python 3.7.0,win10平臺(tái); 2018-08完整項(xiàng)目代碼:https://github.com/NameHewei/python-scr...
摘要:什么是爬蟲一段自動(dòng)抓取互聯(lián)網(wǎng)信息的程序,從互聯(lián)網(wǎng)上抓取對(duì)于我們有價(jià)值的信息四種基本數(shù)據(jù)結(jié)構(gòu)列表列表中的每個(gè)元素都是可變的列表的元素都是有序的,也就是說(shuō)每個(gè)元素都有對(duì)應(yīng)的位置列表可以容納所有的對(duì)象波波超哥小明波波超哥小明如果為切片返回的也是列 什么是爬蟲? 一段自動(dòng)抓取互聯(lián)網(wǎng)信息的程序,從互聯(lián)網(wǎng)上抓取對(duì)于我們有價(jià)值的信息 Python四種基本數(shù)據(jù)結(jié)構(gòu) 列表 **列表中的每個(gè)元素都是可變的...
閱讀 774·2019-08-29 12:49
閱讀 3562·2019-08-29 11:32
閱讀 3457·2019-08-26 10:43
閱讀 2412·2019-08-23 16:53
閱讀 2060·2019-08-23 15:56
閱讀 1709·2019-08-23 12:03
閱讀 2780·2019-08-23 11:25
閱讀 2093·2019-08-22 15:11