Python 爬虫简单示例
爬虫是获取网络数据的重要工具,下面我为你提供一个简单的Python爬虫示例,它可以抓取豆瓣电影Top250的电影信息。这个示例使用了 requests 库发送HTTP请求, BeautifulSoup 库解析HTML内容。
首先,你需要安装所需的库:
pip install requests beautifulsoup4
下面是完整的爬虫代码:
import requests
from bs4 import BeautifulSoup
import time
import random
def get_movies_from_douban():
"""从豆瓣电影Top250抓取电影信息"""
# 存储所有电影信息的列表
all_movies = []
# 豆瓣电影Top250有10页,每页25部电影
for start in range(0, 250, 25):
# 构造URL
url = f"https://movie.douban.com/top250?start={start}"
try:
# 设置请求头,模拟浏览器访问
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'
}
# 发送GET请求
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 检查请求是否成功
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有电影条目
movie_items = soup.find_all('div', class_='item')
# 提取每部电影的信息
for item in movie_items:
movie = {}
# 电影标题
title_element = item.find('span', class_='title')
movie['title'] = title_element.text
# 电影评分
rating_element = item.find('span', class_='rating_num')
movie['rating'] = rating_element.text
# 电影简介
intro_element = item.find('p', class_='quote')
movie['intro'] = intro_element.text.strip() if intro_element else "暂无简介"
all_movies.append(movie)
# 随机延迟1-3秒,避免请求过于频繁
delay = random.uniform(1, 3)
print(f"已抓取第{start//25+1}页,等待{delay:.2f}秒后继续...")
time.sleep(delay)
except requests.exceptions.RequestException as e:
print(f"请求出错: {e}")
except Exception as e:
print(f"处理数据时出错: {e}")
return all_movies
def print_movie_info(movies):
"""打印电影信息"""
print(f"共抓取到{len(movies)}部电影")
for i, movie in enumerate(movies, 1):
print(f"\n第{i}部电影:")
print(f"标题: {movie['title']}")
print(f"评分: {movie['rating']}")
print(f"简介: {movie['intro']}")
def save_to_file(movies, filename="douban_movies.txt"):
"""将电影信息保存到文件"""
try:
with open(filename, 'w', encoding='utf-8') as f:
for movie in movies:
f.write(f"标题: {movie['title']}\n")
f.write(f"评分: {movie['rating']}\n")
f.write(f"简介: {movie['intro']}\n")
f.write("-" * 50 + "\n")
print(f"电影信息已保存到{filename}")
except Exception as e:
print(f"保存文件时出错: {e}")
if __name__ == "__main__":
print("开始抓取豆瓣电影Top250信息...")
movies = get_movies_from_douban()
print_movie_info(movies)
save_to_file(movies)
代码解析
这个爬虫程序主要包含三个核心功能:
1. 数据抓取功能: get_movies_from_douban() 函数负责从豆瓣电影Top250页面获取数据
- 使用循环遍历所有页面(10页,每页25部电影)
- 设置请求头模拟浏览器访问,降低被封IP的风险
- 包含异常处理,确保程序在网络错误或解析错误时不会崩溃
- 添加随机延迟,遵循爬虫礼仪,避免对目标网站造成过大压力
2. 数据处理功能: print_movie_info() 函数负责在控制台打印抓取到的电影信息
- 格式化输出每部电影的标题、评分和简介
3. 数据存储功能: save_to_file() 函数负责将数据保存到文本文件
- 使用UTF-8编码避免中文乱码问题
- 以清晰的格式存储每部电影的信息
爬虫注意事项
使用爬虫时,请务必注意以下几点:
1. 遵守网站规则:查看目标网站的robots.txt文件,了解哪些内容可以抓取,哪些不可以
2. 控制抓取频率:不要频繁发送请求,给服务器留出响应时间
3. 尊重版权:抓取的数据仅用于个人学习和研究,不要用于商业用途
4. 合理使用代理:如果需要大量抓取数据,可以考虑使用代理IP
5. 注意法律风险:不同国家和地区对网络爬虫有不同的法律规定,请确保你的行为合法
这个示例非常基础,实际爬虫项目中可能需要处理更复杂的情况,如动态加载内容、登录验证、反爬机制等。如果你想进一步学习,可以尝试抓取其他网站或添加更多功能。