中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

scrapy簡單入門及實例講解-創(chuàng)新互聯(lián)

爬蟲是python最常見的一類應用,但是如何自己動手來寫一個爬蟲,這可能是很多人關心的問題,這次準備用30分鐘來教會大家如何自己動手編寫一個Scrapy爬蟲的應用

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、做網(wǎng)站與策劃設計,滁州網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:滁州等地區(qū)。滁州做網(wǎng)站價格咨詢:028-86922220

推薦一個不錯的Scrapy視頻教程給大家,可以直接點擊觀看:https://www.bilibili.com/video/av27042686/


一、理解爬蟲原理

首先,我們需要理解爬蟲的原理,只是拿一個庫來用誰都會,但理解它的原理才對大家有好處
scrapy簡單入門及實例講解

通過上圖我們可以對爬蟲的工作原理(不僅限于Scrapy框架)有一個認識:

  • 數(shù)據(jù)源:需要知道從哪里拿到你要的數(shù)據(jù),可以是Web,也可以是App或其他應用
  • 下載器(Download):需要將數(shù)據(jù)下載到本機才能進行分析工作,而在下載中我們需要關注幾件事:性能、模擬操作和分布式等
  • 分析器(Parser):對已下載的數(shù)據(jù)進行分析,有很多種,比如HTML、正則、json等,當然,在分析的過程中,也能發(fā)現(xiàn)更多的鏈接,從而生成更多采集任務
  • 數(shù)據(jù)存儲(Storage):可以將數(shù)據(jù)保存在數(shù)據(jù)或磁盤上,以供后續(xù)產品的調取、分析等

既然理解了爬蟲的原理,我們可以更進一步的認識一下Scrapy框架

二、認識Scrapy框架

Scrapy是Python中很成熟、很常用的一個框架,大部分Python爬蟲都是由Scrapy來編寫的,那么,為了理解Scrapy的基本結構,我們先來看一張圖:
scrapy簡單入門及實例講解

其實,這張圖和我們之前說的爬蟲原理是一一對應的,我們來看看:

  • 下載器(Downloader):將數(shù)據(jù)下載回來,以供分析
  • 爬蟲(Spider):這個其實是用于分析的(Parser),用于對下載的數(shù)據(jù)進行分析
  • 調度器(Scheduler):負責調度任務
  • 數(shù)據(jù)管道(Pipeline):負責把數(shù)據(jù)導出給其他程序、文件、數(shù)據(jù)庫

三、認識Scrapy項目

當然,只是了解上述內容其實意義不大,我們來通過動手做一個例子理解Scrapy

1.搭建初識項目環(huán)境

在正式開始編寫爬蟲之前,我們需要先來創(chuàng)建一個項目

$> scrapy startproject 項目名稱

scrapy簡單入門及實例講解

2.認識項目目錄

先來了解一下剛剛創(chuàng)建好的目錄里面都有什么
scrapy簡單入門及實例講解

在這里面,其實只有兩個東西是我們目前需要關心的:

  • spiders目錄:編寫的所有爬蟲類,都會放在這里
  • settings.py:Scrapy框架提供的所有設置,都會通過這個文件來修改

3.理解“中間件”和”items”

本文我們先關心最基本的功能,所以不會過于深入Scrapy的細節(jié),所以只對中間件和items的功能做一簡單敘述,在其他文章中再詳細說明:

  • 中間件:由于各類數(shù)據(jù)源其實有很多差異,所以middlewares用于屏蔽這種差異,以便于統(tǒng)一處理
  • items:對項目中所有數(shù)據(jù)進行統(tǒng)一化,生成統(tǒng)一的結構化數(shù)據(jù),從而實現(xiàn)程序(爬蟲和其他程序)的標準化

四、抓取案例

本案例中,我們準備抓取一個拍賣手機號的網(wǎng)站:http://www.jihaoba.com/escrow/
scrapy簡單入門及實例講解

1.創(chuàng)建spider

在剛剛創(chuàng)建好的項目中,我們再創(chuàng)建一個文件:phone_spider.py
scrapy簡單入門及實例講解

2.編寫Spider類

import scrapy

class PhoneSpider(scrapy.Spider):
    name='phone'

    start_urls=[
        'http://www.jihaoba.com/escrow/'
    ]

    def parse(self, response):
        pass

在這里我們主要關心幾件事:

  • name:spider的名字,用于啟動抓?。ê竺鏁f)
  • start_urls:起始抓取地址,后續(xù)任務可能產生更多url,但start_urls是入口
  • parse方法:默認的解析回調方法,當下載完成后會自動調用

3.啟動抓取

盡管現(xiàn)在還沒有實際的工作,但我們可以試著啟動爬蟲的抓取

scrapy crawl phone

scrapy簡單入門及實例講解

我們可以看到爬蟲的抓取能夠正常啟動

4.為爬蟲添加功能

我們可以繼續(xù)為爬蟲加入實際的功能

import scrapy

class PhoneSpider(scrapy.Spider):
    name='phone'

    start_urls=[
        'http://www.jihaoba.com/escrow/'
    ]

    def parse(self, response):
        for ul in response.xpath('//div[@class="numbershow"]/ul'):
            phone=ul.xpath('li[contains(@class,"number")]/a/@href').re("\\d{11}")[0]
            price=ul.xpath('li[@class="price"]/span/text()').extract_first()[1:]

            print(phone, price)

這里我們用了一個非常重要的東西——xpath,xpath是一種用于從XML和HTML中提取數(shù)據(jù)的查詢語言,在這里不做贅述,想了解更多xpath的內容請點擊https://www.bilibili.com/video/av30320885

再次啟動抓取,我們會看到一些有用的數(shù)據(jù)產生了
scrapy簡單入門及實例講解

5.爬蟲數(shù)據(jù)導出

當然,我們現(xiàn)在只是把print出來,這肯定不行,需要把數(shù)據(jù)保存到文件中,以便后續(xù)使用
所以,將print改為yield

import scrapy

class PhoneSpider(scrapy.Spider):
    name='phone'

    start_urls=[
        'http://www.jihaoba.com/escrow/'
    ]

    def parse(self, response):
        for ul in response.xpath('//div[@class="numbershow"]/ul'):
            phone=ul.xpath('li[contains(@class,"number")]/a/@href').re("\\d{11}")[0]
            price=ul.xpath('li[@class="price"]/span/text()').extract_first()[1:]

            #print(phone, price)

            yield {
                "phone": phone,
                "price": price
            }

再次運行,并且需要修改運行命令,添加輸出選項

scrapy crawl phone

改為

scrapy crawl phone -o data.json

我們可以看到,運行后目錄中會多出一個data.json,打開后就是我們要的結果數(shù)據(jù)
scrapy簡單入門及實例講解
scrapy簡單入門及實例講解

注意,這里導出的價格中,有的帶有“\u4e07”,這其實是中文“萬”的unicode碼,并不影響數(shù)據(jù)使用
scrapy簡單入門及實例講解

6.抓取更多數(shù)據(jù)

目前只抓取了第一頁的數(shù)據(jù),而我們希望能獲取所有的數(shù)據(jù),所以需要找到下一頁的地址,并讓爬蟲進入其中繼續(xù)抓取
scrapy簡單入門及實例講解
scrapy簡單入門及實例講解

所以,我們需要對代碼進行修改

import scrapy

class PhoneSpider(scrapy.Spider):
    name='phone'

    start_urls=[
        'http://www.jihaoba.com/escrow/'
    ]

    def parse(self, response):
        for ul in response.xpath('//div[@class="numbershow"]/ul'):
            phone=ul.xpath('li[contains(@class,"number")]/a/@href').re("\\d{11}")[0]
            price=ul.xpath('li[@class="price"]/span/text()').extract_first()[1:]

            #print(phone, price)

            yield {
                "phone": phone,
                "price": price
            }

        #繼續(xù)抓取下一頁
        next="http://www.jihaoba.com"+response.xpath('//a[@class="m-pages-next"]/@href').extract_first()
        yield scrapy.Request(next)

我們再次啟動爬蟲

scrapy crawl phone -o data.json

這次,我們會得到比之前多的數(shù)據(jù)
scrapy簡單入門及實例講解

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章題目:scrapy簡單入門及實例講解-創(chuàng)新互聯(lián)
文章位置:http://www.rwnh.cn/article16/dhphgg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站建設、營銷型網(wǎng)站建設、動態(tài)網(wǎng)站、外貿建站、手機網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
上高县| 广丰县| 三台县| 吐鲁番市| 台山市| 柘荣县| 北海市| 禹城市| 绥宁县| 平南县| 稷山县| 临澧县| 双江| 巫山县| 新平| 贵南县| 玉山县| 东兰县| 信阳市| 铁岭市| 浏阳市| 荣成市| 周至县| 阳新县| 闻喜县| 九龙坡区| 株洲市| 杨浦区| 吉隆县| 万山特区| 新宁县| 太和县| 阳江市| 岱山县| 荥阳市| 千阳县| 蚌埠市| 玛多县| 大城县| 定边县| 苍南县|