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的风险

  • 包含异常处理,确保程序在网络错误或解析错误时不会崩溃

  • 添加随机延迟,遵循爬虫礼仪,避免对目标网站造成过大压力

  1. 数据处理功能: print_movie_info() 函数负责在控制台打印抓取到的电影信息
  • 格式化输出每部电影的标题、评分和简介
  1. 数据存储功能: save_to_file() 函数负责将数据保存到文本文件
  • 使用UTF-8编码避免中文乱码问题

  • 以清晰的格式存储每部电影的信息

爬虫注意事项

使用爬虫时,请务必注意以下几点:

  1. 遵守网站规则:查看目标网站的robots.txt文件,了解哪些内容可以抓取,哪些不可以

  2. 控制抓取频率:不要频繁发送请求,给服务器留出响应时间

  3. 尊重版权:抓取的数据仅用于个人学习和研究,不要用于商业用途

  4. 合理使用代理:如果需要大量抓取数据,可以考虑使用代理IP

  5. 注意法律风险:不同国家和地区对网络爬虫有不同的法律规定,请确保你的行为合法

这个示例非常基础,实际爬虫项目中可能需要处理更复杂的情况,如动态加载内容、登录验证、反爬机制等。如果你想进一步学习,可以尝试抓取其他网站或添加更多功能。

相关推荐
A__tao4 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢4 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
明日清晨5 小时前
python扫码登录dy
开发语言·python
bazhange5 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
人工干智能5 小时前
科普:python中你写的模块找不到了——`ModuleNotFoundError`
服务器·python
unicrom_深圳市由你创科技5 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
小敬爱吃饭5 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
宸津-代码粉碎机5 小时前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
知行合一。。。6 小时前
Python--04--数据容器(集合)
python