0
点赞
收藏
分享

微信扫一扫

Mysql 视图&存储过程&触发器

丹柯yx 2024-09-18 阅读 22

使用py怕爬豆瓣影评

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

# 目标URL,替换为你想爬取的电影页面的ID
movie_id = '26752088'  # 示例:电影《哪吒之魔童降世》的ID
url = f"https://movie.douban.com/subject/{movie_id}/comments"

# 请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

# 存储影评信息的列表
comments_list = []

# 爬取多个页面的数据(每个页面包含 20 条影评)
def get_comments(page_num=10):
    for page in range(page_num):
        print(f'正在爬取第 {page + 1} 页的影评...')
        # 使用 params 参数传递 start 值,控制翻页
        params = {
            'start': page * 20,
            'limit': 20,
            'sort': 'new_score',
            'status': 'P'
        }
        
        # 发送 GET 请求
        response = requests.get(url, headers=headers, params=params)
        soup = BeautifulSoup(response.text, 'lxml')
        
        # 查找影评的列表
        comment_divs = soup.find_all('div', class_='comment')
        
        for div in comment_divs:
            # 提取用户、评分、评论时间和影评内容
            user = div.find('span', class_='comment-info').find('a').get_text()
            try:
                rating = div.find('span', class_='rating')['title']
            except TypeError:
                rating = '无评分'
            comment_time = div.find('span', class_='comment-time')['title']
            comment_content = div.find('span', class_='short').get_text().strip()
            
            # 将提取到的信息添加到列表
            comments_list.append({
                'User': user,
                'Rating': rating,
                'Time': comment_time,
                'Comment': comment_content
            })
        
        # 适当延时,避免请求过快被封
        time.sleep(2)

# 调用函数获取影评
get_comments(10)  # 设置需要爬取的页数,例如10页

# 使用 pandas 将数据保存为 CSV 文件
df = pd.DataFrame(comments_list)
df.to_csv('douban_movie_comments.csv', index=False, encoding='utf-8-sig')

print("爬取完成,数据已保存为 douban_movie_comments.csv")

举报

相关推荐

0 条评论