Scrapy框架總結(jié)

一谋作、Scrapy框架的使用步驟:

    1. 創(chuàng)建項目:
      scrapy startproject project_name
    1. cd進(jìn)項目目錄:
      cd project_name
    1. 創(chuàng)建項目應(yīng)用程序:
      scrapy genspider app_name start_url
    1. 編寫爬蟲文件代碼喂窟、settings配置:
      codes........
    1. 執(zhí)行爬蟲程序:
      scrapy crawl app_name

二、Scrapy初始Url的兩種寫法:

  • 一種是常量start_urls,并且需要定義一個方法parse()
import scrapy
class simpleUrl(scrapy.Spider):
    name = "simpleUrl"
    start_urls = [  #另外一種寫法痕届,無需定義start_requests方法
        'http://lab.scrapyd.cn/page/1/',
        'http://lab.scrapyd.cn/page/2/',
    ]
    # 此方法名必須為:parse
    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'mingyan-%s.html' % page
        with open(filename, 'wb') as f:
          f.write(response.body)
        self.log('保存文件: %s' % filename)
  • 另一種是直接定義一個方法:star_requests()
import scrapy
class simpleUrl(scrapy.Spider):
     name = "simpleUrl"

     def start_requests(self):
         urls = [ 
            #爬取的鏈接由此方法通過下面鏈接爬取頁面
            'http://lab.scrapyd.cn/page/1/',
             'http://lab.scrapyd.cn/page/2/',
         ]
         for url in urls:
             yield scrapy.Request(url=url, callback=self.parse)

三级乍、Scrapy調(diào)試工具之scrapy shell使用方法:

調(diào)試就是驗證scrapy到底有木有提取到數(shù)據(jù)的工具,如果木有它你根本不知道你寫的規(guī)則到底有木有提取到數(shù)據(jù)竣贪,所以這個工具是個剛需军洼!其實也很簡單,就是在命令行輸入下面一行代碼而已:
scrapy shell start_url:注意:執(zhí)行此命令時需先cd到項目目錄下

屏幕快照 2018-11-19 下午8.03.38.png

比如我們想提取 http://lab.scrapyd.cntitle演怎,我們可以在[s]: 后面輸入:response.css('title') 匕争,然后回車, 立馬就得到如下結(jié)果:
response

似不似很直觀的驗證了你提取的數(shù)據(jù)對不對爷耀?如果正確了甘桑,我們再把上面的代碼放到我們蜘蛛里面,那這樣就會正確的得到你想要的數(shù)據(jù)歹叮,而不會出現(xiàn)意外了跑杭,這就是scrapy調(diào)試工具的應(yīng)用!

四咆耿、Scrapy 爬取下一頁德谅,scrapy整站爬取

接下來,還是繼續(xù)爬热荨:http://lab.scrapyd.cn (鏈接獨白:為神馬受傷的總是我女阀?)!我們既然要爬取下一頁屑迂,那我們首先要分析鏈接格式浸策,找到下一頁的鏈接,那爬取就簡單了

image.png

主要代碼實現(xiàn)

next_page = response.css('li.next a::attr(href)').extract_first() 
    if next_page is not None:
        next_page = response.urljoin(next_page)
        yield scrapy.Request(next_page, callback=self.parse)

五惹盼、Scrapy arguments:指定蜘蛛?yún)?shù)爬取

Using spider arguments庸汗,這個東西對于許多朋友來說,簡直是雪中送炭手报,因為有了參數(shù)配置爬取蚯舱,就能加大我們爬取的靈活性改化,而不必重復(fù)修改、編寫爬蟲代碼了枉昏。
  比如我們要爬取http://lab.scrapyd.cn里面的數(shù)據(jù)陈肛,原先我們需要全站的,過了幾天需求變了兄裂,我們只需要:“人生”這個標(biāo)簽下面的內(nèi)容句旱,那我們又需要更改爬蟲代碼,又過了幾天晰奖,需求又變谈撒,我們又需要標(biāo)簽:“勵志”下面的內(nèi)容,那我們又得改爬蟲……
  如果爬蟲量少還好匾南,那如果有十個啃匿、一百個……那一天到晚我們只能不斷的修改、不斷的伺候這些爬蟲了蛆楞!
  那怎樣才能讓我們的爬蟲更靈活呢溯乒?scrapy給我提供了可傳參的爬蟲,有了這么個功能豹爹,那人生就更加美麗了裆悄,上面不斷變化的爬蟲我們就可以這樣來玩,首先按scrapy 參數(shù)格式定義好參數(shù)帅戒,如下:

import scrapy


class ArgsspiderSpider(scrapy.Spider):
    name = "argsSpider"

    def start_requests(self):
        url = 'http://lab.scrapyd.cn/'
        # 獲取tag值,也就是爬取時傳過來的參數(shù)
        tag = getattr(self, 'tag', None)
        # 判斷是否存在tag崖技,若存在逻住,重新構(gòu)造url
        if tag is not None:
            # 構(gòu)造url若tag=愛情,url= "http://lab.scrapyd.cn/tag/愛情"
            url = url + 'tag/' + tag
            # 發(fā)送請求爬取參數(shù)內(nèi)容
            yield scrapy.Request(url, self.parse)

    def parse(self, response):
        mingyan = response.css('div.quote')
        
        for v in mingyan:
            text = v.css('.text::text').extract_first()
            tags = v.css('.tags .tag::text').extract()
            tags = ','.join(tags)
            fileName = '%s-語錄.txt' % tags
            with open(fileName, "a+") as f:
                f.write(text)
                f.write('\n')
                f.write('標(biāo)簽:' + tags)
                f.write('\n-------\n')
                f.close()

        next_page = response.css('li.next a::attr(href)').extract_first()
        
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)

代碼寫好之后迎献,那我們要如何傳參呢瞎访?如何運行呢?
比如我們要爬取標(biāo)簽:愛情吁恍,我們可以這樣:
scrapy crawl argsSpider -a tag=愛情
要爬取標(biāo)簽:勵志扒秸,我們可以這樣:
scrapy crawl argsSpider -a tag=勵志
參數(shù):tag=愛情、tag=勵志就可以在爬取的時候傳進(jìn)去我們蜘蛛里面冀瓦,我們就可以不修改蜘蛛伴奥,愉快的爬取了!

六翼闽、scrapy命令明細(xì):

1. Scrapy框架的命令也就十四五個,最常用的命令也就三個拾徙,即:
  scrapy startproject(創(chuàng)建項目)、
  scrapy crawl XX(運行XX蜘蛛)感局、
  scrapy shell http://www.scrapyd.cn(調(diào)試網(wǎng)址為http://www.scrapyd.cn的網(wǎng)站)

2. scrapy命令分為:全局命令尼啡、項目命令暂衡;
  很好理解,全局命令就是在哪都能用崖瞭;項目命令就是只能依托你的項目

全局命令

  • startproject:
    創(chuàng)建項目
    scrapy startproject(創(chuàng)建項目)
  • genspider:
    這個命令的話是根據(jù)爬蟲模板創(chuàng)建爬蟲py文件的命令
    scrapy genspider spider_app_name start_url
  • settings:
    看字面意思狂巢,相信聰明的你已經(jīng)知道它是干嘛的了!其實它就是方便你查看到你對你的scray設(shè)置了些神馬參數(shù)书聚!
    比如我們想得到爬蟲項目的下載延遲唧领,我們可以使用:
    scrapy settings --get DOWNLOAD_DELAY
    比如我們想得到爬蟲項目的名字:
    scrapy settings --get BOT_NAME
  • runspider:
    這個命令有意思,之前我們運行爬蟲項目除了使用:scrapy crawl XX之外寺惫,我們還能用:runspider疹吃,前者是基于項目運行,后者是基于文件運行西雀,也就是說你按照scrapy的爬蟲項目格式編寫了一個py文件萨驶,那你不想創(chuàng)建項目,那你就可以使用runspider艇肴,比如你編寫了一個:scrapyd_cn.py的爬蟲文件腔呜,你要直接運行就是:
    scrapy runspider scrapy_cn.py
  • shell:
    這個命令比較重要,主要是調(diào)試用
    scrapy shell [http://www.scrapyd.cn](http://www.scrapyd.cn/)
  • fetch:
    這個命令其實也可以歸結(jié)為調(diào)試命令的范疇再悼!它的功效就是模擬我們的蜘蛛下載頁面核畴,也就是說用這個命令下載的頁面就是我們蜘蛛運行時下載的頁面,這樣的好處就是能準(zhǔn)確診斷出,我們的到的html結(jié)構(gòu)到底是不是我們所看到的,然后能及時調(diào)整我們編寫爬蟲的策略蒜胖!
    scrapy fetch [http://www.scrapyd.cn](http://www.scrapyd.cn/)
  • version:
    查看scrapy版本
    scrapy version

項目命令

  • crawl:
    運行爬蟲文件
    scrapy crawl my_project
  • check:
    檢查爬蟲文件
    scrapy check my_project
  • list:
    顯示有多少個爬蟲文件
    scrapy list
  • edit:
    編輯文件(類似于linux系統(tǒng)下的vim)
    scrapy edit my_project
  • parse
    常用參數(shù)預(yù)覽
    scrapy parse my_project
  • bench
    項目詳細(xì)運行情況
    scrapy bench my_project

參考Scrapy中文網(wǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拍冠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件温学,死亡現(xiàn)場離奇詭異,居然都是意外死亡甚疟,警方通過查閱死者的電腦和手機(jī)仗岖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來览妖,“玉大人轧拄,你說我怎么就攤上這事》砀啵” “怎么了紧帕?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我是嗜,道長愈案,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任鹅搪,我火速辦了婚禮站绪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丽柿。我一直安慰自己恢准,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布甫题。 她就那樣靜靜地躺著馁筐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坠非。 梳的紋絲不亂的頭發(fā)上敏沉,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音炎码,去河邊找鬼盟迟。 笑死,一個胖子當(dāng)著我的面吹牛潦闲,可吹牛的內(nèi)容都是我干的攒菠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼歉闰,長吁一口氣:“原來是場噩夢啊……” “哼辖众!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起和敬,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤凹炸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后概龄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體还惠,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡饲握,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年私杜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片救欧。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡衰粹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笆怠,到底是詐尸還是另有隱情铝耻,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站瓢捉,受9級特大地震影響频丘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泡态,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一搂漠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧某弦,春花似錦桐汤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腾降,卻和暖如春拣度,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜂莉。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工蜡娶, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人映穗。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓窖张,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚁滋。 傳聞我的和親對象是個殘疾皇子宿接,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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

  • 文件目錄說明: scrapy.cfg: 項目的配置文件 tutorial/: 該項目的python模塊。之后您將在...
    關(guān)鍵先生耶閱讀 565評論 0 0
  • 類型推斷 console log 如下
    點滴86閱讀 445評論 0 1
  • 開始下雨了辕录,這座城市漫長的白日看不到盡頭睦霎,仿佛黑暗從不曾降臨,略微寒意走诞,讓人只想穿上帽衫開瓶啤酒副女,獨自叫一盆小龍蝦...
    嘉每文閱讀 260評論 2 3
  • 如果你不是官二代,富二代蚣旱,不是一畢業(yè)就有早已準(zhǔn)備好的工作讓你前去入職碑幅,那么,我作為過來人塞绿,作為畢業(yè)了的沟涨,踏入過職場...
    妍兮閱讀 1,162評論 51 53
  • 《權(quán)力只被某些人擁有》 知識復(fù)盤 權(quán)力之路第一步: 成為最引人注目的那一個:勇于向老板提出要求;不要謙虛异吻,要勇于向...
    凱瑞姐姐閱讀 166評論 0 0