国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Scrapy Demo

VEIGHTZ / 1838人閱讀

摘要:用于下載網(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 scrapy
Hello 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

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

相關(guān)文章

  • 【python爬蟲學(xué)習(xí) 】python3.7 scrapy 安裝,demo實(shí)例,實(shí)踐:爬取百度

    摘要:安裝可能的問(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...

    asoren 評(píng)論0 收藏0
  • scrapy入門

    摘要:快速入門首先,初步要做的就是快速構(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ò)...

    CrazyCodes 評(píng)論0 收藏0
  • scrapy 自學(xué)入門demo分享

    摘要:本文基于,平臺(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...

    linkFly 評(píng)論0 收藏0
  • Python爬蟲入門

    摘要:什么是爬蟲一段自動(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è)元素都是可變的...

    xbynet 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<