Python爬蟲實戰(zhàn)——三爬豆瓣電影TOP250

之前爬取豆瓣電影僅僅是爬取TOP250主頁面上的摘要信息,很多信息不夠全面。這次我更加深入一層,通過主頁上的電影url鏈接深入到每一部電影的詳情頁面爬取電影信息。

1 思路分析

這次需要分兩步走,首先從https://movie.douban.com/top250獲得25條電影詳情頁面的url如肖申克的救贖https://movie.douban.com/subject/1292052/,然后將這個url通過requests獲取到HTML文檔,最后用Xpath解析文檔獲取信息。

2 代碼

import requests, re
from lxml import etree
import pandas as pd

headers = {
       'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    }

#獲取電影信息
def get_movie_info(url):
    r = requests.get(url, headers=headers)
    selector = etree.HTML(r.text)
    movie_hrefs = selector.xpath('//div[@class="hd"]/a/@href')  #電影的詳情地址
    movie_list = []
    
    for movie_href in movie_hrefs:
        r = requests.get(movie_href, headers=headers)
        selector = etree.HTML(r.text)
        #獲取電影信息       
        name = selector.xpath('//*[@id="content"]/h1/span[1]/text()')   #電影名
        director = selector.xpath('//div[@id="info"]/span[1]/span[2]/a/text()')  #導演
        director = director[0] if len(director) >= 1 else "未知"
        actors = selector.xpath('//*[@id="info"]/span[3]/span[2]')      #演員們
        actor = actors[0].xpath('string(.)')  if len(actors) >= 1 else  "未知"     #標簽套標簽,用string(.)同時獲取所有文本
        style_list = re.findall('<span property="v:genre">(.*?)</span>', r.text, re.S)          
        style_list = selector.xpath('//*[@property="v:genre"]/text()')
        style = '/'.join(style_list)        #類型
        country = re.findall('<span class="pl">制片國家/地區(qū):</span>(.*?)<br/>', r.text, re.S)[0] #地區(qū)
        release_time = re.findall('上映日期:</span>.*?>(.*?)</span>', r.text, re.S) #上映日期
        score = selector.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0] #電影評分

        # 將電影信息添加到列表中
        movie_list.append([name, director, actor, style, country, release_time, score])

    return movie_list
        
def save_to_csv(movie_list):
    # 將列表轉換為DataFrame
    df = pd.DataFrame(movie_list, columns=['電影名', '導演', '演員', '類型', '國家/地區(qū)', '公映時間', '評分'])
    # 檢查文件是否存在
    try:
        df.to_csv('douban_top250.csv', mode='x', index=False, encoding='utf_8_sig')
    except FileExistsError:
        df.to_csv('douban_top250.csv', mode='a', header=False, index=False, encoding='utf_8_sig')
    
#主函數(shù)
if __name__ == '__main__':
    base_url = 'https://movie.douban.com/top250?start={}&filter='
    # 遍歷所有頁面
    for i in range(10):
        url = base_url.format(i * 25)

        # 獲取并保存電影信息到CSV文件
        save_to_csv(get_movie_info(url))

3 爬取結果

image.png
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容