溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用Scrapy爬取豆瓣TOP250

發(fā)布時(shí)間:2021-12-04 16:32:15 來源:億速云 閱讀:190 作者:柒染 欄目:互聯(lián)網(wǎng)科技

如何用Scrapy爬取豆瓣TOP250,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

最好的學(xué)習(xí)方式就是輸入之后再輸出,分享一個(gè)自己學(xué)習(xí)scrapy框架的小案例,方便快速的掌握使用scrapy的基本方法。

本想從零開始寫一個(gè)用Scrapy爬取教程,但是官方已經(jīng)有了樣例,所以還是不寫了,盡量分享在網(wǎng)上不太容易找到的東西。自己近期在封閉培訓(xùn),更文像蝸牛一樣,抱歉。

Scrapy簡(jiǎn)介

Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。

其最初是為了 頁(yè)面抓取 (更確切來說, 網(wǎng)絡(luò)抓取 )所設(shè)計(jì)的, 也可以應(yīng)用在獲取API所返回的數(shù)據(jù)(例如 Amazon Associates Web Services ) 或者通用的網(wǎng)絡(luò)爬蟲。

如何用Scrapy爬取豆瓣TOP250

如果此前對(duì)scrapy沒有了解,請(qǐng)先查看下面的官方教程鏈接。

架構(gòu)概覽:https://docs.pythontab.com/scrapy/scrapy0.24/topics/architecture.html

Scrapy入門教程:https://docs.pythontab.com/scrapy/scrapy0.24/intro/tutorial.html

爬蟲教程

首先,我們看一下豆瓣TOP250頁(yè)面,發(fā)現(xiàn)可以從中提取電影名稱、排名、評(píng)分、評(píng)論人數(shù)、導(dǎo)演、年份、地區(qū)、類型、電影描述。

如何用Scrapy爬取豆瓣TOP250

????Item對(duì)象是種簡(jiǎn)單的容器,保存了爬取到得數(shù)據(jù)。其提供了類似于詞典的API以及用于聲明可用字段的簡(jiǎn)單語(yǔ)法。所以可以聲明Item為如下形式。

class DoubanItem(scrapy.Item):
    # 排名
    ranking = scrapy.Field()
    # 電影名稱
    title = scrapy.Field()
    # 評(píng)分
    score = scrapy.Field()
    # 評(píng)論人數(shù)
    pople_num = scrapy.Field()
    # 導(dǎo)演
    director = scrapy.Field()
    # 年份
    year = scrapy.Field()
    # 地區(qū)
    area = scrapy.Field()
    # 類型
    clazz = scrapy.Field()
    # 電影描述
    decsription = scrapy.Field()

我們抓取到相應(yīng)的網(wǎng)頁(yè)后,需要從網(wǎng)頁(yè)中提取自己需要的信息,可以使用xpath語(yǔ)法,我使用的是BeautifulSoup網(wǎng)頁(yè)解析器,經(jīng)過BeautifulSoup解析的網(wǎng)頁(yè),可以直接使用選擇器篩選需要的信息。有一些說明寫到代碼注釋里面去了,就不再贅述。

Chrome 也可以直接復(fù)制選擇器或者XPath,如下圖所示。

如何用Scrapy爬取豆瓣TOP250

class douban_spider(Spider):

    count = 1

    # 爬蟲啟動(dòng)命令
    name = 'douban'

    # 頭部信息,偽裝自己不是爬蟲程序
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
    }

    # 爬蟲啟動(dòng)鏈接
    def start_requests(self):
        url = 'https://movie.douban.com/top250'
        yield Request(url, headers=self.headers)

    # 處理爬取的數(shù)據(jù)
    def parse(self, response):

        print('第', self.count, '頁(yè)')
        self.count += 1

        item = DoubanItem()
        soup = BeautifulSoup(response.text, 'html.parser')

        # 選出電影列表
        movies = soup.select('#content div div.article ol li')

        for movie in movies:
            item['title'] = movie.select('.title')[0].text
            item['ranking'] = movie.select('em')[0].text
            item['score'] = movie.select('.rating_num')[0].text
            item['pople_num'] = movie.select('.star span')[3].text

            # 包含導(dǎo)演、年份、地區(qū)、類別
            info = movie.select('.bd p')[0].text
            director = info.strip().split('\n')[0].split('   ')
            yac = info.strip().split('\n')[1].strip().split(' / ')

            item['director'] = director[0].split(': ')[1]
            item['year'] = yac[0]
            item['area'] = yac[1]
            item['clazz'] = yac[2]

            # 電影描述有為空的,所以需要判斷
            if len(movie.select('.inq')) is not 0:
                item['decsription'] = movie.select('.inq')[0].text
            else:
                item['decsription'] = 'None'
            yield item

        # 下一頁(yè):
        # 1,可以在頁(yè)面中找到下一頁(yè)的地址
        # 2,自己根據(jù)url規(guī)律構(gòu)造地址,這里使用的是第二種方法
        next_url = soup.select('.paginator .next a')[0]['href']
        if next_url:
            next_url = 'https://movie.douban.com/top250' + next_url
            yield Request(next_url, headers=self.headers)

然后在項(xiàng)目文件夾內(nèi)打開cmd命令,運(yùn)行scrapy crawl douban -o movies.csv就會(huì)發(fā)現(xiàn)提取的信息就寫入指定文件了,下面是爬取的結(jié)果,效果很理想。

如何用Scrapy爬取豆瓣TOP250

看完上述內(nèi)容,你們掌握如何用Scrapy爬取豆瓣TOP250的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI