您好,登錄后才能下訂單哦!
這篇文章主要介紹python如何爬取電影天堂的最新電影,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
本次爬取的站點選擇電影天堂,網(wǎng)址是: www.ydtt8.net。爬取內(nèi)容是整個站點的所有電影信息,包括電影名稱,導(dǎo)演、主演、下載地址等。具體抓取信息如下圖所示:
電影天堂里面的電影數(shù)目成千上萬,電影類型也是讓人眼花繚亂。我們?yōu)榱吮WC爬取的電影信息不重復(fù), 所以要確定一個爬取方向。目前這情況真讓人無從下手。但是,我們點擊主頁中的【最新電影】選項,跳進(jìn)一個新的頁面。驀然有種柳暗花明又一村的感覺。
由圖可知道,電影天堂有 5 個電影欄目,分別為最新電影、日韓電影、歐美電影、國內(nèi)電影、綜合電影。每個欄目又有一定數(shù)量的分頁,每個分頁有 25 條電影信息。那么程序的入口可以有 5 個 url 地址。這 5 個地址分別對應(yīng)每個欄目的首頁鏈接。
知道爬取入口,后面的工作就容易多了。我通過測試發(fā)現(xiàn)這幾個欄目除了頁面的 url 地址不一樣之外,其他例如提取信息的 xpath 路徑是一樣的。因此,我把 5 個欄目當(dāng)做 1 個類,再該類進(jìn)行遍歷爬取。
我這里“最新電影”為例說明爬取思路。
1)請求欄目的首頁來獲取到分頁的總數(shù),以及推測出每個分頁的 url 地址;
2)將獲取到的分頁 url 存放到名為 floorQueue 隊列中;
3)從 floorQueue 中依次取出分頁 url,然后利用多線程發(fā)起請求;
4)將獲取到的電影頁面 url 存入到名為 middleQueue 的隊列;
5)從 middleQueue 中依次取出電影頁面 url,再利用多線程發(fā)起請求;
6)將請求結(jié)果使用 Xpath 解析并提取所需的電影信息;
7)將爬取到的電影信息存到名為 contentQueue 隊列中;
8)從 contentQueue 隊列中依次取出電影信息,然后存到數(shù)據(jù)庫中。
根據(jù)爬取思路,我設(shè)計出爬蟲架構(gòu)。如下圖所示:
主要闡述幾個重要的類的代碼
main 類
主要工作兩個:第一,實例化出一個dytt8Moive
對象,然后開始爬取信息。第二,等爬取結(jié)束,將數(shù)據(jù)插入到數(shù)據(jù)庫中。
處理爬蟲的邏輯代碼如下:
創(chuàng)建數(shù)據(jù)庫以及表,接著再把電影信息插入到數(shù)據(jù)庫的代碼如下:
TaskQueue 類
維護(hù) floorQueue、middleQueue、contentQueue 三個隊列的管理類。之所以選擇隊列的數(shù)據(jù)結(jié)構(gòu),是因為爬蟲程序需要用到多線程,隊列能夠保證線程安全。
dytt8Moive 類
dytt8Moive 類是本程序的主心骨。程序最初的爬取目標(biāo)是 5 個電影欄目,但是目前只現(xiàn)實了爬取最新欄目。如果你想爬取全部欄目電影,只需對 dytt8Moive 稍微改造下即可。
getMoiveInforms
方法是主要負(fù)責(zé)解析電影信息節(jié)點并將其封裝成字典。在代碼中,你看到 Xpath 的路徑表達(dá)式不止一條。因為電影天堂的電影詳情頁面的排版參差不齊,所以單單一條內(nèi)容提取表達(dá)式、海報和影片截圖表達(dá)式、下載地址表達(dá)式遠(yuǎn)遠(yuǎn)無法滿足。
選擇字典類型作為存儲電影信息的數(shù)據(jù)結(jié)構(gòu),也是自己爬坑之后才決定的。這算是該站點另一個坑人的地方。電影詳情頁中有些內(nèi)容節(jié)點是沒有,例如類型、豆瓣評分,所以無法使用列表按順序保存。
我這里展示自己爬取最新欄目中 4000 多條數(shù)據(jù)中前面部分?jǐn)?shù)據(jù)。
以上是“python如何爬取電影天堂的最新電影”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。