在爬虫之前做好准备
在开始编写爬虫之前,必须先配备相应的工具和库。首先,确保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协议,以免给网站带来太大的负担。在收集数据时,尽量合理安排时间,遵循网站的规定,尊重数据的来源。