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