溫馨提示×

溫馨提示×

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

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

用Python爬蟲爬取電影的方法

發(fā)布時(shí)間:2020-09-03 11:09:52 來源:億速云 閱讀:1415 作者:小新 欄目:編程語言

小編給大家分享一下用Python爬蟲爬取電影的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

豆瓣電影Top250應(yīng)該是屬于最容易抓取的靜態(tài)網(wǎng)頁類型,直接用python的urllib庫發(fā)送請求,即可獲得瀏覽器上看到的所有信息。不需要登錄,也沒有動(dòng)態(tài)加載信息。

一、思路分析

用chrome打開豆瓣電影Top250頁面, https://movie.douban.com/top250。如下圖第一部電影,肖申克的救贖,電影名稱、導(dǎo)演、主演、年份、評分、評價(jià)人數(shù)這些信息是我們需要的。我們用瀏覽器或者python向?yàn)g覽器發(fā)送請求的時(shí)候,返回的是html代碼,我們平時(shí)用瀏覽器瀏覽網(wǎng)頁看到的這些圖文并茂的規(guī)整的頁面其實(shí)是html代碼在經(jīng)過瀏覽器渲染后的結(jié)果。所以我們需要找到要抓取信息在html代碼中的位置。這就叫html解析,解析的工具有很多。比如:正則表達(dá)式、Beautifulsoup、Xpath、css等,這里采用xpath方法。

如何找到信息在html中的位置呢,首先鼠標(biāo)右鍵檢查,打開當(dāng)前網(wǎng)頁的html代碼。然后先單擊箭頭1處的箭頭,把鼠標(biāo)移動(dòng)到你要查找的信息上,如箭頭2處的電影名:肖申克的救贖 ,右邊就會(huì)顯示你點(diǎn)擊信息在html代碼中的位置(箭頭3)。一個(gè)網(wǎng)頁的html代碼全部打開看上去會(huì)非常的繁多,其實(shí)html代碼是一層一層結(jié)構(gòu)化的,非常規(guī)整的。每一對尖括號包起來的是一個(gè)標(biāo)簽,比如箭頭3的<span> ......</span>,這就是一個(gè)span標(biāo)簽。span叫標(biāo)簽名,class="title"是標(biāo)簽的屬性,“肖申克的救贖”是標(biāo)簽的內(nèi)容。

標(biāo)簽span在html代碼中的完整路徑應(yīng)該是:

body/div[@id="wrapper"]/div[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]

用xpath查找元素就是按照路徑一層層找下去,[@id="wrapper"]表示查找的標(biāo)簽的屬性,用標(biāo)簽加上屬性,我們可以更方便的定位,不用從頭找到尾。div[1]、span[1]表示要查找的是該標(biāo)簽下的第1個(gè)div標(biāo)簽,第1個(gè)span標(biāo)簽。找到span標(biāo)簽可以用方法span[1]/text()取出其中的內(nèi)容,pan[1]/@class可以取出屬性值。

電影封面的下載,只要找到圖片的鏈接地址,就可以調(diào)用urllib庫中的函數(shù)urllib.request.urlretrieve()直接下載。找到圖片鏈接的方法和上面一樣,把鼠標(biāo)移動(dòng)到封面上,右邊就會(huì)顯示鏈接的位置。

每一頁網(wǎng)址的變化規(guī)律,一頁可以顯示25部電影,就是說這250部電影一共有10頁。觀察前幾頁的網(wǎng)址很容易發(fā)現(xiàn)規(guī)律:就是start后面跟的參數(shù)變化,等于(頁數(shù)-1)*25,而且發(fā)現(xiàn)后面的filter去掉也不影響。

第一頁:https://movie.douban.com/top250

第二頁:https://movie.douban.com/top250?start=25&filter=

第三頁:https://movie.douban.com/top250?start=50&filter=

用Python爬蟲爬取電影的方法

二、代碼實(shí)現(xiàn)

先用urllib發(fā)送請求,獲得返回的源代碼html。返回的html是字符串格式,需要用tree.HTML轉(zhuǎn)化成xpath能處理的對象。觀察html代碼,每一個(gè)<li> ...</li>,標(biāo)簽剛好對應(yīng)一部電影,所以我們先定位到每一個(gè)li標(biāo)簽,在對每一個(gè)li標(biāo)簽解析獲得這個(gè)電影的各個(gè)信息。

data_title ---電影名稱

data_info  ---電影信息(導(dǎo)演、主演、上映時(shí)間)

data_quote ---電影引言

data_score ---電影評分

data_num   ---電影評論人數(shù)

data_picurl---電影封面鏈接

完整代碼如下:

from urllib import request
from lxml import etree
#構(gòu)造函數(shù),抓取第i頁信息
def crow(i):
    #  構(gòu)造第i頁的網(wǎng)址
    url='https://movie.douban.com/top250?start='+str(25*i)
    #  發(fā)送請求,獲得返回的html代碼并保存在變量html中
    html=request.urlopen(url).read().decode('utf-8')
    #將返回的字符串格式的html代碼轉(zhuǎn)換成xpath能處理的對象
    html=etree.HTML(html)
    #先定位到li標(biāo)簽,datas是一個(gè)包含25個(gè)li標(biāo)簽的list,就是包含25部電影信息的list
    datas = html.xpath('//ol[@class="grid_view"]/li')
    a=0
    for data in datas:
        data_title=data.xpath('div/div[2]/div[@class="hd"]/a/span[1]/text()')
        data_info=data.xpath('div/div[2]/div[@class="bd"]/p[1]/text()')
        data_quote=data.xpath('div/div[2]/div[@class="bd"]/p[2]/span/text()')
        data_score=data.xpath('div/div[2]/div[@class="bd"]/div/span[@class="rating_num"]/text()')
        data_num=data.xpath('div/div[2]/div[@class="bd"]/div/span[4]/text()')
        data_picurl=data.xpath('div/div[1]/a/img/@src')
        print("No: "+str(i*25+a+1))
        print(data_title)
        #保存電影信息到txt文件,下載封面圖片
        with open('douban250.txt','a',encoding='utf-8')as f:
            #封面圖片保存路徑和文件名
            picname='F:/top250/'+str(i*25+a+1)+'.jpg'
            f.write("No: "+str(i*25+a+1)+'\n')
            f.write(data_title[0]+'\n')
            f.write(str(data_info[0]).strip()+'\n')
            f.write(str(data_info[1]).strip()+'\n')
            #因?yàn)榘l(fā)現(xiàn)有幾部電影沒有quote,所以這里加個(gè)判斷,以免報(bào)錯(cuò)
            if data_quote:
                f.write(data_quote[0]+'\n')
            f.write(data_score[0]+'\n')
            f.write(data_num[0]+'\n')
            f.write('\n'*3)
            #下載封面圖片到本地,路徑為picname
            request.urlretrieve(data_picurl[0],filename=picname)
        a+=1
for i in range(10):
    crow(i)

三、結(jié)果如下:

用Python爬蟲爬取電影的方法

用Python爬蟲爬取電影的方法

看完了這篇文章,相信你對用Python爬蟲爬取電影的方法有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

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

AI