爬取豆瓣电影TOP250存入Excel中(课堂学习)

import requests
from bs4 import BeautifulSoup
from pandas import DataFrame



headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55'}

start_num = [i for i in range(0, 226, 25)]

list_url_mv = []  # 所有电影的URL

for start in start_num:
    url = 'https://movie.douban.com/top250?start={}&filter='.format(start)
    print('正在处理url:', url)

    response = requests.get(url=url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')

    url_mv_list = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a')
    for index_url in range(len(url_mv_list)):
        url_mv = url_mv_list[index_url]['href']
        list_url_mv.append(url_mv)

# 对每部电影进行处理
def loading_mv(url, number):
    list_mv = []
    print('-----正在处理第{}部电影-----'.format(number + 1))
    list_mv.append(number + 1)  # 排名

    # 解析网页
    response_mv = requests.get(url=url, headers=headers)
    soup_mv = BeautifulSoup(response_mv.text, 'html.parser')

    # 爬取电影名
    mv_name = soup_mv.find_all('span', attrs={'property': 'v:itemreviewed'})  # 电影名
    mv_name = mv_name[0].get_text()
    list_mv.append(mv_name)
    # print(mv_name)

    # 爬取电影的上映时间
    mv_year = soup_mv.select('span.year')  # 电影上映时间
    mv_year = mv_year[0].get_text()[1:5]
    list_mv.append(mv_year)
    # print(mv_year)

    # 爬取导演信息
    list_mv_director = []  # 导演
    mv_director = soup_mv.find_all('a', attrs={'rel': "v:directedBy"})
    for director in mv_director:
        list_mv_director.append(director.get_text())
    string_director = '/'.join(list_mv_director)  # 重新定义格式
    list_mv.append(string_director)
    # print(list_mv_director)

    # 爬取主演信息
    list_mv_star = []  # 主演
    mv_star = soup_mv.find_all('span', attrs={'class': 'actor'})
    if mv_star == []:  # 在第210部时没有主演
        list_mv.append(None)
    else:
        mv_star = mv_star[0].get_text().strip().split('/')
        mv_first_star = mv_star[0].split(':')
        list_mv_star.append(mv_first_star[-1].strip())
        del mv_star[0]  # 去除'主演'字段
        for star in mv_star:
            list_mv_star.append(star.strip())
        string = '/'.join(list_mv_star)  # 重新定义格式
        list_mv.append(string)

    # 爬取电影类型
    list_mv_type = []  # 电影类型
    mv_type = soup_mv.find_all('span', attrs={'property': 'v:genre'})
    for type in mv_type:
        list_mv_type.append(type.get_text())
    string_type = '/'.join(list_mv_type)
    list_mv.append(string_type)
    # print(list_mv_type)

    # 爬取电影评分
    mv_score = soup_mv.select('strong.ll.rating_num')  # 评分
    mv_score = mv_score[0].get_text()
    list_mv.append(mv_score)

    # 爬取评价人数
    mv_evaluation_num = soup_mv.select('a.rating_people')  # 评价人数
    mv_evaluation_num = mv_evaluation_num[0].get_text().strip()
    list_mv.append(mv_evaluation_num)

    # 爬取剧情简介
    mv_plot = soup_mv.find_all('span', attrs={"class": "all hidden"})  # 剧情简介
    if mv_plot == []:
        list_mv.append(None)
    else:
        string_plot = mv_plot[0].get_text().strip().split()
        new_string_plot = ' '.join(string_plot)
        list_mv.append(new_string_plot)

    # 加入电影网址
    list_mv.append(url)

    return list_mv

list_all_mv = []

dict_mv_info = {}
for number in range(len(list_url_mv)):
    mv_info = loading_mv(list_url_mv[number], number)
    list_all_mv.append(mv_info)
print('-----运行结束-----')

pd = DataFrame(list_all_mv,
               columns=['电影排名', '电影名', '上映时间', '导演', '主演', '电影类型', '电影评分', '评价人数',
                        '电影简介', '电影链接'])

pd.to_excel(r'D:\school\大三下\数据标注\豆瓣电影Top.xlsx')


# 数据处理

# 读取 Excel 文件
df = pd.read_excel('D:\school\大三下\数据标注\豆瓣电影Top.xlsx')

# 对列进行操作
column_to_split = '电影类型'

# 将字符串分割,并提取最后的值
df['Last_Value'] = df[column_to_split].str.split('/').str[-1]

# 保存修改后的数据回原文件
df.to_excel('D:\school\大三下\数据标注\豆瓣电影Top.xlsx', index=False)

记得将我的文件路径换成你们自己的文件路径 

Python的Selenium库主要用于浏览器自动化操作,包括网页抓取。要通过Selenium爬取豆瓣Top250电影列表并保存到Excel文档,你需要做以下几个步骤: 1. 安装所需库:首先安装`selenium`、`webdriver_manager`(用于管理WebDriver,如ChromeDriver)以及`pandas`和`openpyxl`(用于处理Excel文件)。 ```bash pip install selenium webdriver_manager pandas openpyxl ``` 2. 下载并配置WebDriver:下载对应浏览器的WebDriver,比如ChromeDriver,并将其添加到系统路径或指定Selenium查找。 3. 编写Python脚本: ```python import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd # 初始化浏览器实例 options = webdriver.ChromeOptions() options.add_argument('--headless') # 无头模式,隐藏窗口 driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) # 路径替换为你实际的URL url = 'https://movie.douban.com/top250' # 访问豆瓣Top250页面 driver.get(url) time.sleep(2) # 等待页面加载完成 # 查找元素,找到表格数据区域 table = driver.find_element_by_css_selector('#main > div.hd > div.bd > ul > li') # 获取所有电影信息 data_rows = [] while table is not None: title_cell = table.find_element(By.CSS_SELECTOR, '.title a') rating_cell = table.find_element(By.CSS_SELECTOR, '.rating_num').text link = title_cell.get_attribute('href') data_row = { '电影名': title_cell.text, '评分': rating_cell, '链接': link } data_rows.append(data_row) next_page_button = table.find_element(By.CSS_SELECTOR, '.next') if next_page_button.is_displayed(): next_page_button.click() table = driver.find_elements(By.CSS_SELECTOR, '#main > div.hd > div.bd > ul > li')[0] # 更新table else: table = None # 结束循环,如果找不到下一页按钮 # 将数据转换为DataFrame df = pd.DataFrame(data_rows) # 保存到Excel文件 writer = pd.ExcelWriter('douban_top250.xlsx', engine='openpyxl') df.to_excel(writer, sheet_name='豆瓣Top250', index=False) writer.save() # 关闭浏览器 driver.quit() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值