python爬取豆瓣電影Top250的信息

python爬取豆瓣電影Top250的信息

2018年07月25日 20:03:14 呢喃無音 閱讀數:50

python爬取豆瓣電影Top250的信息。

初學,所以代碼的不夠美觀和精煉。

如果代碼有錯,請各位讀者在評論區評論,以免誤導其他同學。

(可能也沒多少人看)

 

 

 

 

 

import requests
#從bs4中導入BeautifulSoup模塊
from bs4 import BeautifulSoup
#獲取電影的名稱(中文,外文,其他)
def get_movies_name():
    #定製請求的頭部
    headers = {
        "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
        "Host":"movie.douban.com"
    }
    movie_chinese_list=[]
    movie_english_list=[]
    movie_other_name_list=[]
    for j in range(0,10):
        i = (25 * j)
        r = requests.get("https://movie.douban.com/top250?start="+str(i)+"&filter=",headers=headers)
        soup=BeautifulSoup(r.text,"html.parser")
        # 兩個參數:(標籤,標識符)
        div_list=soup.find_all("div",class_="hd")
        for each in div_list:
            #each.a.span只會定位到a標籤下的第一個標籤的內容
            #each.a.contents會定位到a標籤下的每一個標籤的內容
            #print(len(each.a.contents))
            #movie_chinese=each.a.span.text.strip()
            #第一個爲0.
            movie_chinese=each.a.contents[1].text.strip()
            #strip()除去字符串開頭和結尾指定的字符,默認爲空格或換行
            movie_english=each.a.contents[3].text.strip()
            movie_english=movie_english[2:]
            #其他名稱爲第6個內容,但可能存在沒有其他名稱的電影。
            if len(each.a.contents)>5:
                movie_other=each.a.contents[5].text.strip()
            movie_other=movie_other[2:]
            movie_chinese_list.append(movie_chinese)
            movie_english_list.append(movie_english)
            movie_other_name_list.append(movie_other)
    return movie_chinese_list,movie_english_list,movie_other_name_list
#獲取電影的導演和主演
def get_other_contents():
    i=0
    headers = {
        "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
        "Host":"movie.douban.com"
    }
    directors_list=[]#導演
    starring_list=[]#主演
    release_date_list=[]#上映年份
    movie_country_list=[]#電影國別
    film_classification_list=[]#電影分類
    for j in range(0, 10):
        i = (25 * j)
        r = requests.get("https://movie.douban.com/top250?start=" + str(i) + "&filter=", headers=headers)
        soup = BeautifulSoup(r.text, "html.parser")
        div_list=soup.find_all("div",class_="bd")
        for each in div_list:
            if len(each.p.contents)>1:
                """國家,年份,類別"""
                #對得到的字符串進行處理
                movie_information=each.p.contents[2].strip()
                #對字符串通過”/“切片
                movie_information=movie_information.split("/")
                #去掉多餘的字符。
                release_date_list.append(movie_information[0].strip("\xa0"))
                movie_country_list.append(movie_information[1].strip(" "))
                film_classification_list.append(movie_information[2].strip(" "))
                """導演,主演"""
                # 顯示p標籤下第一部分的全部內容
                #print(each.p.contents[0].strip())
                #用"   "對字符串進行分割
                each_movie = each.p.contents[0].strip().split("   ")
                director=each_movie[0]
                #存在有導演,無主演的電影(動畫片)
                if len(each_movie)>1:
                    starring=each_movie[1]
                #去掉多餘字符(導演:)
                directors_list.append(director.strip("導演:"))
                # 去掉多餘字符(導演:. 和 /)
                starring_list.append(starring.strip("主演:").strip(".").strip("/"))
    return directors_list,starring_list,release_date_list,movie_country_list,film_classification_list
#獲取電影評分和經典影評
def get_movie_score():
    headers = {
        "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
        "Host":"movie.douban.com"
    }
    movie_score_list = []#評分
    movie_review_list = []#經典影評
    for j in range(0, 10):
        i = (25 * j)
        r = requests.get("https://movie.douban.com/top250?start=" + str(i) + "&filter=", headers=headers)
        soup = BeautifulSoup(r.text, "html.parser")
        div_list_1=soup.find_all("div",class_="star")
        div_list_2 = soup.find_all("p", class_="quote")
        for each_1 in div_list_1:
            #通過contents把代碼轉化成列表.
            #通過text提取關鍵字
            movie_score=each_1.contents[3].text
            movie_score_list.append(movie_score)
        for each_2 in div_list_2:
            #通過contents把代碼轉化成列表.
            #通過text提取關鍵字
            #列表中只有一個元素
            movie_review=each_2.text
            movie_review_list.append(movie_review.strip())
    return movie_review_list,movie_score_list
(movie_chinese_list,movie_english_list,movie_other_name_list)=get_movies_name()
print("豆瓣電影Top250中文電影名:(共%d個電影)"%len(movie_chinese_list))
print(movie_chinese_list)
print("豆瓣電影Top250外文電影名:(共%d個電影)"%len(movie_english_list))
print(movie_english_list)
print("豆瓣電影Top250其他電影名:(共%d個電影)"%len(movie_other_name_list))
print(movie_other_name_list)
 
(directors_list,starring_list,release_date_list,movie_country_list,film_classification_list)=get_other_contents()
print("導演:")
print(directors_list)
print("主演:")
print(starring_list)
print("年份:")
print(release_date_list)
print("國家:")
print(movie_country_list)
print("類別:")
print(film_classification_list)
 
(movie_review_list,movie_score_list)=get_movie_score()
print("評分:")
print(movie_score_list)
print("經典影評:")
print(movie_review_list)
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章