您的位置:首页 > 汽车 > 时评 > 3.4.2 爬取豆瓣影评实战

3.4.2 爬取豆瓣影评实战

2024/11/17 16:43:01 来源:https://blog.csdn.net/weixin_44815507/article/details/141689883  浏览:    关键词:3.4.2 爬取豆瓣影评实战

课程目标

  • 爬取豆瓣影评实战

课程内容

编码实现
爬虫部分
import requests  # 导入requests库,用于发送HTTP请求
from fake_useragent import UserAgent  # 导入UserAgent库,用于生成随机的User-Agent
import bs4  # 导入BeautifulSoup库,用于解析HTML内容
from tqdm import tqdm  # 导入tqdm库,用于显示进度条
import time  # 导入time库,用于暂停执行
import pandas as pd  # 导入pandas库,用于数据处理和生成Excel文件# 定义一个函数,用于获取评论的详细信息
def get_detail(data_rid):headers = {# 设置请求头,模拟浏览器行为}url = f"https://movie.douban.com/j/review/{data_rid}/full"  # 构造请求URLresponse = requests.get(url, headers=headers)  # 发送GET请求rj = response.json()  # 解析返回的JSON数据soup_ht = bs4.BeautifulSoup(rj['html'], 'html.parser')  # 解析HTMLreturn soup_ht.text  # 返回评论文本内容# 初始化一个空列表,用于存储爬取的数据
infos = []# 循环爬取10页数据
for page in range(10):print("正在爬取第{}页".format(page+1))  # 打印当前爬取的页码# 设置请求头headers = {# ...}# 构造请求URLurl = "https://movie.douban.com/review/best"start = page * 20  # 计算每页的起始索引params = {"start": str(start),  # 将起始索引转换为字符串并设置为请求参数}response = requests.get(url, headers=headers, params=params)  # 发送GET请求soup = bs4.BeautifulSoup(response.text, 'html.parser')  # 解析HTML# 找到所有评论项son_divs = soup.find_all('div', class_='main review-item')for son_div in tqdm(son_divs):  # 使用tqdm显示进度条# 提取电影名称、图片URL、影评人名称、评论ID、评论内容、发布时间、赞数和踩数movie_name = son_div.a.img['alt']movie_name_img_url = son_div.a.img['src']writer_name = son_div.find("a", class_="name").textdata_rid = son_div.find("div", class_="review-short")["data-rid"]comment_text = get_detail(data_rid)  # 调用函数获取评论内容create_time = son_div.find('span', class_='main-meta').textfavour = int(son_div.find('a', {'title': '有用'}).span.text.strip()) if son_div.find('a', {'title': '有用'}) else 0tread = int(son_div.find('a', {'title': '没用'}).span.text.strip()) if son_div.find('a', {'title': '没用'}) else 0# 将提取的数据存储为字典,并添加到infos列表中info = {"电影名称": movie_name,"电影图片": movie_name_img_url,"影评人": writer_name,"评论内容": comment_text,"发布时间": create_time,"赞": favour,"踩": tread}infos.append(info)time.sleep(0.3)  # 暂停0.3秒,避免请求过快被限制# 将爬取的数据转换为pandas的DataFrame对象
df = pd.DataFrame(infos)
print(df.head())  # 打印前几行数据,用于检查
df.to_excel('豆瓣影评.xlsx', index=False)  # 将数据保存到Excel文件中

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com