目录

1. 引言

2. 准备工作

2.1 安装依赖库

2.2 目标分析

3. 核心代码实现

3.1 发送HTTP请求

3.2 使用开发者工具中分析网页结构,定位短评数据在html中的位置

3.3 解析HTML内容

3.4 数据存储

4. 结果展示

数据预览(表格)

5.数据存储

​编辑

6. 注意事项

7. 扩展学习

8. 参考资源


1. 引言

网络爬虫是自动化获取网页数据的核心技术,广泛应用于数据分析、市场调研等领域。本文以豆瓣电影《封神第二部:战火西岐》的短评数据为例,展示如何通过Python的requestsBeautifulSoup库实现评论数据的爬取,并整理为结构化数据。


2. 准备工作

2.1 安装依赖库

pip install requests beautifulsoup4 pandas

2.2 目标分析

  • 目标网址:豆瓣电影《封神第二部:战火西岐》短评页面

  • 目标字段:用户名、赞同数、评论时间、IP地址、评论内容

  • 反爬策略:需添加User-Agent请求头模拟浏览器访问。


3. 核心代码实现

3.1 发送HTTP请求

# 导入必要的库
# requests用于发送HTTP请求获取网页内容
import requests
# BeautifulSoup用于解析HTML文档内容
from bs4 import BeautifulSoup

# 定义目标URL(豆瓣电影短评页面)
url = 'https://movie.douban.com/subject/30181250/comments?status=P'
# 设置请求头信息(模拟浏览器访问)
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'
}
response = requests.get(url, headers=headers)
html_content = response.text

代码运行结果图:

3.2 使用开发者工具中分析网页结构,定位短评数据在html中的位置

3.3 解析HTML内容

# 使用BeautifulSoup解析HTML文档
# 参数说明:
# html_content: 需要解析的HTML内容
# 'lxml': 指定使用lxml解析器(需要先安装:pip install lxml)
soup = BeautifulSoup(html_content, 'lxml')

# 提取用户名
list_name=[a.string for a in soup.select('.comment .comment-info a')]

# 提取赞同数
list_title=[span.string for span in soup.select('.comment .comment-vote span')]

# 提取评论时间和IP地址
list_time=[span.string.strip() for span in soup.select('.comment .comment-info .comment-time')]
list_ip=[span.string.strip() for span in soup.select('.comment-location')]

# 提取评论内容
list_data=[span.string for span in soup.select('.comment-content .short')]

代码运行结果图:

3.4 数据存储

import pandas as pd

df = pd.DataFrame({
    '用户名': usernames,
    '赞同数': votes,
    '评论时间': times,
    'IP地址': ips,
    '评论内容': comments
})

4. 结果展示

数据预览(表格)

用户名 赞同数 评论时间 IP地址 评论内容摘要
番茄加糖 18490 2025-01-29 12:13:28 福建 全片最有血性的只有邓婵玉一人...
一梦华胥 7456 2025-01-29 11:32:09 山东 演员台词含糊不清,战斗剧情太儿戏...
..................................

5.数据存储

# 导入SQLAlchemy的create_engine模块
# 用于创建数据库连接引擎
from sqlalchemy import create_engine

# 创建MySQL数据库引擎
# 格式说明:mysql+pymysql://用户名:密码@服务器地址:端口/数据库名
# root: 数据库用户名
# 123456: 数据库密码
# localhost: 数据库服务器地址
# 3306: MySQL默认端口
# test: 目标数据库名称
# charset=utf8mb4: 设置字符集支持中文
engine = create_engine(
    'mysql+pymysql://root:123456@localhost:3306/test?charset=utf8mb4'
)

# 将DataFrame数据写入MySQL数据库
# 参数说明:
# 'douban':目标表名(会自动创建)
# engine:数据库连接引擎
# index=False:不写入DataFrame的索引列
# if_exists='append':如果表存在则追加数据(可选值:fail, replace, append)
# dtype:指定字段类型
df.to_sql('douban', engine, index=False, if_exists='append')

如图成功存储到MySQL表中:

6. 注意事项

  1. 反爬机制

    • 豆瓣可能限制高频访问,建议添加time.sleep(2)延迟请求。

    • 使用代理IP池应对IP封锁(推荐服务: ScraperAPI)。

  2. 法律合规

    • 遵守豆瓣的robots.txt规则,避免爬取敏感信息。

    • 控制爬取速度,减少服务器压力。


7. 扩展学习

  • 多页爬取:通过分析分页URL规律(如?start=20),实现循环翻页。

  • 动态内容:若页面数据通过JavaScript加载,可使用SeleniumScrapy-Splash

  • 数据可视化:结合MatplotlibTableau分析评论情感倾向。


8. 参考资源


通过本文,你可以快速掌握基础爬虫的实现逻辑。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐