美文网首页
Python爬虫实战——三爬豆瓣电影TOP250

Python爬虫实战——三爬豆瓣电影TOP250

作者: libdream | 来源:发表于2023-08-05 10:26 被阅读0次

之前爬取豆瓣电影仅仅是爬取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">制片国家/地区:</span>(.*?)<br/>', r.text, re.S)[0] #地区
        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=['电影名', '导演', '演员', '类型', '国家/地区', '公映时间', '评分'])
    # 检查文件是否存在
    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')
    
#主函数
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

相关文章

网友评论

      本文标题:Python爬虫实战——三爬豆瓣电影TOP250

      本文链接:https://www.haomeiwen.com/subject/gavbpdtx.html