Scrapy——入門(mén)基礎(chǔ)

  • 沒(méi)有金剛鉆別攬瓷器活,當(dāng)我們?cè)谏疃扰廊r(shí)和海量數(shù)據(jù)采集時(shí),就需要一把利器幫助我們來(lái)完成,這時(shí)的scrapy就閃亮登場(chǎng)了?。?!
  • 開(kāi)始接觸一個(gè)新的東西我們一般會(huì)從who? what?where?how?來(lái)解析它——廢話有點(diǎn)多啊,還是開(kāi)始吧!

一:scrapy概述

  • 用python開(kāi)發(fā)的主要進(jìn)行數(shù)據(jù)采集的一個(gè)應(yīng)用程序框架,底層使用了twisted異步模塊,實(shí)現(xiàn)了快速,高層次采集數(shù)據(jù)

二:安裝

  • windows環(huán)境下安裝(需要兩步完成)
    首先安裝scrapy
    pip install scrapy
    easy_install scrapy
    然后安裝win32
    pip install pypiwin32
    ps:為什么要安裝win32?
    因?yàn)榘惭b了scrapy之后,在Windows可以正常的項(xiàng)目開(kāi)發(fā),但是運(yùn)行項(xiàng)目會(huì)出現(xiàn)報(bào)錯(cuò)類(lèi)似于winerror這樣的問(wèn)題,安裝了pypiwin32模塊,可以是scrapy模塊調(diào)用win底層C庫(kù)進(jìn)行函數(shù)操作

三:scrapy項(xiàng)目開(kāi)發(fā)

1.創(chuàng)建項(xiàng)目:通過(guò)命令來(lái)完成

scrapy startproject +項(xiàng)目名稱(chēng)

如:創(chuàng)建一個(gè)myspider項(xiàng)目,創(chuàng)建成功后會(huì)出現(xiàn)如下的項(xiàng)目結(jié)構(gòu)


image.png
|--myspider/ 項(xiàng)目根目錄
    |--scrapy.cfg項(xiàng)目配置文件
    |--myspider/ 爬蟲(chóng)程序開(kāi)發(fā)模塊
        |--spiders/爬蟲(chóng)程序所在的目錄
            |---demo
        |--items.py采集的數(shù)據(jù),定義封裝模型類(lèi)
        |--pipelines.py采集完成后對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證和存儲(chǔ)模塊
        |--middlewares.py中間件定義模塊
        |--setting.py項(xiàng)目設(shè)置模塊

2.在spiders文件下開(kāi)始爬蟲(chóng)程序的開(kāi)發(fā)

1.分析要爬取的url地址

'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=6',
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=7',
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=8',

ps:采集網(wǎng)站上的三頁(yè)數(shù)據(jù),分析自己想要采集的數(shù)據(jù),并自定義字段名稱(chēng)
職位:job
公司:company
薪水:salary

2.將自定義的字段封裝在items.py模塊中,創(chuàng)建item類(lèi)

import scrapy 

#定義一個(gè)類(lèi)
class ZhaopinItem(scrapy.Item)

    #定義屬性字段
    job = scrapy.Field()
    company = scrapy.Field()
    salary = scrapy.Field()

3.在spiders文件下創(chuàng)建爬蟲(chóng)程序

import scrapy
from .. import items

class ZhiLian(scrapy.Spider):

    #定義爬蟲(chóng)的名稱(chēng),用于在命令中調(diào)用
    name = 'zl'

    #定義域名限制,只能爬取xxx域名下的數(shù)據(jù)
    allowed_domains = ['zhaopin.com']
  
    #定義url地址
    start_urls =(
 
        'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=6',
        'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=7',
        'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=8',
    )

    def parse(self, response):

        '''
        采集到數(shù)據(jù)后,自動(dòng)執(zhí)行的函數(shù),主要進(jìn)行如下功能
                數(shù)據(jù)篩選——》封裝Item對(duì)象——》傳遞數(shù)據(jù)給Pipelines
                    采集到的數(shù)據(jù)封裝在response
        '''
        #將數(shù)據(jù)保存到文件中
        filename = response.url.split('&')[-1] + '.html'
        with open(filename, 'w') as f:
            #爬蟲(chóng)采集到的數(shù)據(jù),會(huì)封裝在response.body屬性中,可以直接獲取
            f.write(response.body)

4.數(shù)據(jù)處理
在pipelines.py模塊中定義處理Item數(shù)據(jù)的pipelines,將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中(后續(xù)操作)

3.運(yùn)行項(xiàng)目程序

在命令行里切換到項(xiàng)目根目錄文件路徑下,然后在命令行里運(yùn)行:
scrapy crawl + name 定義爬蟲(chóng)的名稱(chēng)
如:scrapy crawl zl 這樣項(xiàng)目就啟動(dòng)了

看到這里應(yīng)該對(duì)scrapy框架的應(yīng)用有了初步的了解,欲知后事且看下回分解.....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容