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

Python爬虫入门实战:爬取博客文章数据并保存

Python爬虫入门实战:爬取博客文章数据并保存

概述

本文将介绍如何使用Python的requests和BeautifulSoup库实现一个简单的网页爬虫,通过实际案例演示如何爬取博客文章数据并存储到本地文件。本文适合Python爬虫初学者,通过案例快速掌握基本爬虫开发流程。


一、环境准备

1.1 安装所需库

pip install requests beautifulsoup4

1.2 目标网站分析

我们以测试网站https://quotes.toscrape.com/(专门用于爬虫练习的网站)为例,目标:

  • 爬取所有页面的名人名言
  • 提取内容、作者、标签信息
  • 保存为CSV文件

二、代码实现

2.1 基础爬虫实现

import requests
from bs4 import BeautifulSoup
import csv

def get_page(url):
    """发送HTTP请求获取页面内容"""
    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'
    }
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 检查请求是否成功
        return response.text
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        return None

def parse_page(html):
    """解析页面提取数据"""
    soup = BeautifulSoup(html, 'lxml')
    quotes = soup.find_all('div', class_='quote')
    
    data = []
    for quote in quotes:
        text = quote.find('span', class_='text').get_text()
        author = quote.find('small', class_='author').get_text()
        tags = [tag.get_text() for tag in quote.find_all('a', class_='tag')]
        
        data.append({
            'text': text,
            'author': author,
            'tags': ', '.join(tags)
        })
    return data

def save_to_csv(data, filename='quotes.csv'):
    """保存数据到CSV文件"""
    with open(filename, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=['text', 'author', 'tags'])
        writer.writeheader()
        writer.writerows(data)

if __name__ == '__main__':
    base_url = 'https://quotes.toscrape.com/page/{}/'
    all_data = []
    
    # 遍历所有页面(示例网站共有10页)
    for page in range(1, 11):
        url = base_url.format(page)
        print(f"正在爬取第{page}页: {url}")
        html = get_page(url)
        if html:
            page_data = parse_page(html)
            all_data.extend(page_data)
    
    save_to_csv(all_data)
    print(f"数据已保存到quotes.csv,共爬取{len(all_data)}条数据")

三、核心功能解析

3.1 请求头设置

通过设置User-Agent模拟浏览器访问:

headers = {
    'User-Agent': 'Mozilla/5.0 (...)'
}

3.2 数据解析

使用BeautifulSoup的find方法定位元素:

soup.find_all('div', class_='quote')  # 定位所有名言区块

3.3 分页处理

通过观察URL规律实现翻页:

base_url = 'https://quotes.toscrape.com/page/{}/'

四、运行结果

生成的CSV文件示例:

text,author,tags
"The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.",Albert Einstein,change,deep-thoughts,thinking,world
"Try not to become a man of success. Rather become a man of value.",Albert Einstein,adulthood,success,value
...

五、注意事项

  1. 遵守robots协议:检查目标网站/robots.txt
  2. 设置访问间隔:添加time.sleep(2)避免频繁请求
  3. 异常处理:增强代码健壮性
  4. 反爬应对:建议使用代理IP和随机User-Agent

六、扩展学习

  • 动态网页爬取:Selenium/Playwright
  • 异步爬虫:aiohttp
  • 爬虫框架:Scrapy
  • 数据存储:MySQL/MongoDB

总结

本文通过一个完整的爬虫案例,演示了从发送请求到数据存储的全流程。实际开发中需要根据目标网站结构调整解析逻辑,并始终遵守法律法规和网站规则。爬虫开发需要持续实践,建议从简单的静态网站开始逐步提升难度。


声明:本文仅用于技术学习交流,请勿用于非法用途。实际开发中请遵守目标网站的相关规定。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/57227.html

相关文章:

  • #UVM# 关于 config_db 机制中的直线非直线设置和获取讲解
  • 《UE5_C++多人TPS完整教程》学习笔记35 ——《P36 武器类(Weapon Class)》
  • 软考 中级软件设计师 考点笔记总结 day01
  • 编程考古-Borland历史:《.EXE Interview》对Anders Hejlsberg关于Delphi的采访内容(中)
  • qt 操作多个sqlite文件
  • RuoYi框架添加自己的模块(学生管理系统CRUD)
  • 【VUE2】第三期——样式冲突、组件通信、异步更新
  • DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!
  • Spring Boot与Axon Framework整合教程
  • 南京SMT贴片加工核心工艺解析
  • 智慧城市智慧社区项目建设方案
  • 虚拟路由冗余协议(VRRP)技术详解:原理、应用与配置实践
  • 个人电脑本地部署DeepSeek来离线使用
  • 中小企业Windows双因素认证的“轻量化”安全解决方案
  • 在ArcMap中通过Python编写自定义工具(Python Toolbox)实现点转线工具
  • 出现“ping不通但可以远程连接”的情况可能由以下原因导致
  • 企业如何选择研发项目进度管理软件?盘点15款实用工具
  • Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术
  • 艺嘉美学:匠心编织户外休闲新风尚
  • STM32F10XXX标准库函数及外设结构体
  • 蓝桥备赛(13)- 链表和 list(下)
  • 表格columns拼接两个后端返回的字段(以umi框架为例)
  • 分布式光伏发电的发展现状与前景
  • idea中的查看git历史记录,不显示详细信息
  • 1.11.信息系统的分类【DSS】
  • Go红队开发—格式导出
  • Java后端高频面经——Spring、SpringBoot、MyBatis
  • 启动/关闭jar服务shell脚本【Linux】
  • MySQL完善配置---可视化
  • 什么是hive