首页 > Python 笔记 > python爬取豆瓣电影影评

python爬取豆瓣电影影评

更新:
在爬虫之前做好准备

在开始编写爬虫之前,必须先配备相应的工具和库。首先,确保Python环境已经安装好,然后使用pip安装请求库requests和分析库BeautifulSoup4。使用这两个数据库可以帮助我们从网页中提取所需的影评数据。


# 安装所需库
pip install requests
pip install beautifulsoup4

有了这些准备工作,我们需要了解目标网站的结构及其请求规则。打开浏览器,进入豆瓣电影的一个电影页面,检查其影评部分的URL格式,以及HTML中影评内容的标签和类别名称(浏览器开发者的工具可能需要使用)。

获得HTML内容的影评列表页面

首先,我们需要获得影评列表页面的内容,并通过requests库向指定的URL发送请求,以获得HTML内容。


import requests
from bs4 import BeautifulSoup

# URL豆瓣电影评论页面
url = 'https://movie.douban.com/subject/26363254/comments'

# GET请求模拟浏览器发送
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)

# 检查请求是否成功
if response.status_code == 200:
    # HTML内容的打印返回
    print(response.text)

仅仅获得HTML内容是不够的,我们必须从中分析出我们需要的影评数据。

对HTML进行分析,提取影评信息

下一步,利用BeautifulSoup分析获得的HTML文本,提取具体的影评信息。


# 对HTML内容进行BeautifulSoup分析
soup = BeautifulSoup(response.text, 'html.parser')

# 查找存储影评的HTML元素
comment_list = soup.find_all('div', class_='comment')

# 对每个影评的具体信息进行分析
for comment in comment_list:
    # 得到评论者的名字
    commenter = comment.find('a', class_='').text
    # 获得评论内容
    content = comment.find('p', class_='comment-content').text.strip()
    # 获取评分
    rating_tag = comment.find('span', class_='rating')
    # 有些评论可能没有评分,这里判断一下。
    rating = rating_tag['title'] if rating_tag else '无评分'
    # 打印评论者和评论内容
    print(f'评论者: {commenter}, 评分: {rating}')
    print(f评论内容: {content}\n')

这类代码将遍历影评列表,提取每个影评评论者的名称、评分和评论内容,最后打印出来。

处理分页和循环爬行

豆瓣片的影评通常是分页显示的。为爬取更多数据,我们需要解决分页问题。


import time

# URL初始页面
base_url = 'https://movie.douban.com/subject/26363254/comments'
# 逐页爬行
for i in range(10):  # 假定爬行前10页的评论?
    # 完整的URL拼接(每页20条评论)
    page_url = f'{base_url}?start={i*20}&limit=20'
    
    # 发送请求获取HTML内容
    response = requests.get(page_url, headers=headers)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        comment_list = soup.find_all('div', class_='comment')

        # 同样的方法分析评论
        for comment in comment_list:
            commenter = comment.find('a', class_='').text
            content = comment.find('p', class_='comment-content').text.strip()
            rating_tag = comment.find('span', class_='rating')
            rating = rating_tag['title'] if rating_tag else '无评分'
            print(f'评论者: {commenter}, 评分: {rating}')
            print(f评论内容: {content}\n')

    # 设置延迟设置,以避免过快爬取被封ip。
    time.sleep(2)

通过改变请求的URL参数,在此代码中`start`和`limit`实现翻页。与此同时,设置2秒的延迟,防止被服务器识别为爬虫,限制访问。

在这里,我们已经可以获得豆瓣影评的基本内容。这些技巧真的很简单直接,同时还要考虑反爬虫策略的处理,保证整个爬行过程的顺利运行。

但是别忘了,爬虫的行为应该遵守网站的Robots协议,以免给网站带来太大的负担。在收集数据时,尽量合理安排时间,遵循网站的规定,尊重数据的来源。

文章目录
顶部