当前位置: 首页 > news >正文

【python】Python爬虫入门教程:使用requests库

Python爬虫入门教程:使用requests库

爬虫是数据获取的重要手段,下面我将通过一个完整的示例,教你如何使用Python的requests库编写一个简单的爬虫。我们将以爬取豆瓣电影Top250为例。

【python】网络爬虫教程 - 教你用python爬取豆瓣电影 Top250

1. 环境准备

首先需要安装必要的库:

pip install requests beautifulsoup4

2. 项目结构规划

一个简单的爬虫项目通常包含以下模块:

  • 发送HTTP请求获取页面内容
  • 解析HTML提取数据
  • 数据存储
  • 控制爬虫行为(如翻页、延时)

3. 编写爬虫代码

下面是一个完整的爬虫示例:

import requests
from bs4 import BeautifulSoup
import time
import random
import csvclass DoubanSpider:def __init__(self):# 设置请求头,模拟浏览器访问self.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'}# 存储结果的列表self.movies = []def get_page(self, page_num):"""获取指定页数的HTML内容"""url = f'https://movie.douban.com/top250?start={page_num*25}'try:response = requests.get(url, headers=self.headers, timeout=10)# 检查响应状态码if response.status_code == 200:return response.textelse:print(f"请求失败,状态码: {response.status_code}")return Noneexcept requests.exceptions.RequestException as e:print(f"请求异常: {e}")return Nonedef parse_page(self, html_content):"""解析HTML内容,提取电影信息"""if not html_content:returnsoup = BeautifulSoup(html_content, 'html.parser')# 查找所有电影项movie_items = soup.select('div.item')for item in movie_items:try:# 提取电影标题title = item.select_one('span.title').text# 提取评分rating = item.select_one('span.rating_num').text# 提取简介quote = item.select_one('span.inq')quote = quote.text if quote else '无简介'# 提取导演和主演info = item.select_one('div.bd p').text.strip()# 添加到结果列表self.movies.append({'title': title,'rating': rating,'quote': quote,'info': info})except Exception as e:print(f"解析错误: {e}")def save_to_csv(self, filename='douban_movies.csv'):"""将结果保存为CSV文件"""if not self.movies:print("没有数据可保存")returnwith open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile:fieldnames = ['title', 'rating', 'quote', 'info']writer = csv.DictWriter(csvfile, fieldnames=fieldnames)# 写入表头writer.writeheader()# 写入数据writer.writerows(self.movies)print(f"数据已保存到 {filename}")def run(self, pages=10):"""运行爬虫,爬取指定页数的数据"""for page in range(pages):print(f"正在爬取第 {page+1} 页...")html_content = self.get_page(page)self.parse_page(html_content)# 设置随机延时,避免频繁请求delay = random.uniform(1, 3)print(f"等待 {delay:.2f} 秒后继续...")time.sleep(delay)# 保存数据self.save_to_csv()print(f"共爬取 {len(self.movies)} 条电影数据")# 运行爬虫
if __name__ == "__main__":spider = DoubanSpider()# 爬取前10页数据,共250条spider.run(pages=10)

4. 代码解析

这个爬虫程序包含以下关键部分:

  1. 请求处理

    • get_page 方法发送HTTP请求获取网页内容
    • 设置了请求头和超时时间,提高稳定性
    • 处理了可能的请求异常
  2. 数据解析

    • parse_page 方法使用BeautifulSoup解析HTML
    • 通过CSS选择器定位电影信息元素
    • 提取标题、评分、简介等关键信息
  3. 数据存储

    • save_to_csv 方法将结果保存为CSV文件
    • 使用UTF-8-sig编码确保中文正常显示
  4. 爬虫控制

    • run 方法控制爬取流程
    • 设置随机延时避免被封IP
    • 支持指定爬取页数

5. 进阶优化建议

  1. 添加异常处理:可以增强错误处理机制,例如失败重试功能

  2. 使用代理IP:爬取大量数据时,使用代理IP避免被封

  3. 数据清洗:提取数据后进行清洗和验证

  4. 存储优化:可以使用数据库存储数据,如SQLite、MySQL等

  5. 异步请求:对于大规模爬取,可以考虑使用aiohttp提高效率

这个爬虫示例展示了基本的爬虫架构和实现方法。实际应用中,你可以根据目标网站的结构调整解析逻辑,或者添加更多功能如图片下载、数据可视化等。

http://www.dtcms.com/a/306674.html

相关文章:

  • 【git】在 GitLab 上如何把 A 分支(如 feature/xxx)合并到 B 分支(如 trunk)
  • Scala实现常用排序算法
  • 深入理解 Kotlin Flow:异步数据流处理的艺术
  • MidJourney精选图集与提示词生成器:AI创意灵感与高效提示词工具
  • composer 常用命令
  • 高防CDN与高防IP的选择
  • docker可视化管理工具lazydocker
  • 【百卷编程】Go语言大厂高级面试题集
  • 3GPP TS 38.331 V18.6.0 (2025-06)中文版
  • 工业5G路由器赋能高速公路实时监控
  • 【问题未解决-寻求帮助】VS Code 中使用 Conda 环境,运行 Python 后 PowerShell 终端输出内容立即消失
  • 《Java 程序设计》第 12 章 - 异常处理
  • T113-i Linux系统完整构建指南:从SDK开箱到内核镜像量产烧录全流程
  • 2025年湖北中级注册安全工程师报考那些事
  • docker 用于将镜像打包为 tar 文件
  • 【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)
  • 【公有云部署模型】yolo模型公有云部署
  • 用聊天方式聊聊msvcr100.dll丢失的解决方法有哪些?msvcr100.dll是什么
  • 7.pcl滤波(一)
  • Python在Web开发领域的崛起与生态探索:从脚本语言到全栈利器
  • Unity Standard Shader 解析(四)之ForwardAdd(简化版)
  • 机器视觉halcon7-缺陷检测
  • SpringCloud -- MQ高级
  • 关于获取某目录及子目录下所有文件且不包含隐藏文件
  • dify + mcp 实现图片 ocr 识别
  • Apache RocketMQ 的核心概念(Core Concepts)
  • 解决 Node.js 托管 React 静态资源的跨域问题
  • SpringBoot之整合SSM步骤
  • 基因组选择育种-2.3多性状与多组学整合GS-GWAS
  • Python 使用pandas库实现Excel字典码表对照自动化处理