天天看點

Python爬蟲—貓眼電影排行TOP100

學習Python爬蟲也有段時間了,之前也看了許多大神的案例,自己也琢磨了爬取原理,由于是個人公号記錄,就省去教科書式教學,純屬記錄,由于爬取過程中一直着力于自身技能,所有代碼均未作批注,以後文章中必須加以改正。

  這篇文章是關于貓眼電影排行榜Top100,具體如何排名我們不作研究,隻提取我們想要的東西。官網圖檔如圖所示:

Python爬蟲—貓眼電影排行TOP100

  我們主要提取的内容有電影名稱,排名,演員,評分和上映時間,話不多說,直接上代碼,

import requests
from bs4 import BeautifulSoup
           

爬蟲過程中我們主要采用Python自帶的requests庫第三方庫。那就是著名美麗湯—BeautifulSoup,安裝過程很簡單,pip即可。

def get_one_page(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 '
                     'Safari/537.36 '
    }
    response = requests.get(url,headers=headers)
    if response.status_code == 200:
        return response.text
    return None
           

好了,開始代碼的正文,首先定義一個函數,用來封裝目标頁面的文本内容,後續提取的内容直接從裡邊得到即可,要注意的是,許多網站設定反爬機制,,是以我們用浏覽器僞裝自己就不用擔心封IP了,這裡是Google浏覽器,個人推薦,特别好用,然後根據狀态碼判定是否連接配接成功,傳回值為200就表示成功了。

def parse_one_page(html):
    soup = BeautifulSoup(html,'lxml')
    pattern = soup.find_all('dd')
    movie_list = []
    if pattern:
        for item in pattern:
            index_num = item.i.string
            title = item.a['title']
            actor = item.find('p',{'class':'star'}).get_text()
            releasetime = item.find('p',{'class':'releasetime'}).get_text()
            score = item.find('p',{'class':'score'}).get_text()
            score = '(%s)'%score
            # print(index_num,title,actor,releasetime,score)
            movie_list.append(index_num+'.'+title+score+actor.replace(' ','')+releasetime)
        return movie_list
    return None
           

接下來就是要解析我們之前爬取的頁面了,這時候美麗湯就派上用場了,我們注意到,所有的内容都儲存在‘dd’标簽下,是以我們直接找到它所有的内容,然後通過每個名稱的節點把需要的東西爬取下來,最後全部添加到建立的一個空清單就可以。

def write_to_file(text):
    with open('maoyan.txt', 'a+', encoding='utf-8') as f:
        for i in text:
            f.write(str(i) + '\n')

def main():
    basic_url = 'http://maoyan.com/board/4'
    for i in range(0,100,10):
        url = basic_url + '?offset=%s' %i
        html = get_one_page(url)
        movie_list = parse_one_page(html)
        write_to_file(movie_list)

main()
           

内容到手後,就需要儲存到本地了,很簡單,寫入本地,最後定義主函數,指派我們需要的變量,運作主函數就大功告成了。下邊是我們的成果展示:

1.霸王别姬(9.6)
主演:張國榮,張豐毅,鞏俐
上映時間:1993-01-01(中國香港)
2.肖申克的救贖(9.5)
主演:蒂姆·羅賓斯,摩根·弗裡曼,鮑勃·岡頓
上映時間:1994-10-14(美國)
3.羅馬假日(9.1)
主演:格利高裡·派克,奧黛麗·赫本,埃迪·艾伯特
上映時間:1953-09-02(美國)
4.這個殺手不太冷(9.5)
主演:讓·雷諾,加裡·奧德曼,娜塔莉·波特曼
上映時間:1994-09-14(法國)
5.教父(9.3)
主演:馬龍·白蘭度,阿爾·帕西諾,詹姆斯·肯恩
上映時間:1972-03-24(美國)
6.泰坦尼克号(9.5)
主演:萊昂納多·迪卡普裡奧,凱特·溫絲萊特,比利·贊恩
上映時間:1998-04-03
7.龍貓(9.2)
           

至此,爬蟲完畢。雖然教程很籠統,可這隻是為了友善自己記錄查詢而已,如果作為新手學習,還差了些火候,就這樣,不定期更新自己的學習成果。同時,本公衆号号會逐漸完善起來,涉及個人愛好的各個領域,加油,Vodka。