杰瑞科技汇

Python爬虫菜鸟教程该怎么学?

Python 爬虫入门终极指南(菜鸟教程)

你好,未来的爬虫大师!欢迎来到 Python 爬虫的世界,这份教程将带你从零开始,轻松入门,让你能自信地抓取互联网上的数据。

Python爬虫菜鸟教程该怎么学?-图1
(图片来源网络,侵删)

目录

  1. 什么是爬虫?
  2. 准备工作:安装 Python 和库
  3. 第一步:发送你的第一个 HTTP 请求
  4. 第二步:解析网页内容(HTML)
  5. 第三步:提取你需要的数据
  6. 第四步:存储数据(保存到文件)
  7. 完整代码示例:抓取“名言网”
  8. 爬虫进阶与注意事项
  9. 总结与学习资源

什么是爬虫?

想象一下,互联网是一个巨大的图书馆,里面有数不清的书籍(网页),你不可能一本一本地去找你需要的信息。

爬虫(Web Crawler / Spider) 就像一个不知疲倦的机器人图书管理员,它可以:

  • 访问 图书馆(服务器)。
  • 浏览 书架(网页列表)。
  • 翻开 一本书(获取网页内容)。
  • 阅读摘抄 你需要的段落(提取数据)。
  • 把摘抄的内容整理成一份报告(存储数据)。

在 Python 中,我们用代码来指挥这个“机器人”。


准备工作:安装 Python 和库

在开始之前,你需要两样东西:

Python爬虫菜鸟教程该怎么学?-图2
(图片来源网络,侵删)

a) Python 如果你还没有安装 Python,请先去 Python 官网 下载并安装,安装时,请务必勾选 "Add Python to PATH" 选项,这样你才能在命令行中使用它。

b) 必要的库 我们需要两个强大的库来帮助我们:

  • requests: 用来向网站发送请求,获取网页内容,就像爬虫的“眼睛”和“手”。
  • BeautifulSoup: 用来解析网页内容,方便地提取数据,就像爬虫的“大脑”,用来理解和分析看到的“书”。

打开你的命令行(Windows 是 cmdPowerShell,Mac/Linux 是 Terminal),输入以下命令来安装它们:

pip install requests
pip install beautifulsoup4

第一步:发送你的第一个 HTTP 请求

我们的目标是获取一个网页的 HTML 内容,这里我们用一个非常简单的测试网站:http://books.toscrape.com/ (一个专门用来练习爬虫的网站)。

Python爬虫菜鸟教程该怎么学?-图3
(图片来源网络,侵删)

创建一个名为 scraper.py 的文件,然后输入以下代码:

# scraper.py
import requests
# 1. 定义你想要爬取的网址
url = 'http://books.toscrape.com/'
# 2. 使用 requests.get() 发送 GET 请求
try:
    response = requests.get(url)
    # 3. 检查请求是否成功 (状态码 200 表示成功)
    response.raise_for_status()  # 如果请求失败 (404, 500), 这会抛出一个异常
    # 4. 打印获取到的网页内容 (前 500 个字符)
    print("成功获取网页内容!")
    print("网页内容预览:")
    print(response.text[:500])
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

运行代码: 在命令行中,进入 scraper.py 所在的目录,然后运行:

python scraper.py

你应该会看到: 屏幕上会打印出 http://books.toscrape.com/ 这个网站首页的 HTML 代码的前 500 个字符,恭喜!你已经成功获取了你的第一个网页!


第二步:解析网页内容(HTML)

直接看一大坨 HTML 代码很头疼。BeautifulSoup 可以帮我们把这段代码变成一个结构化的对象,让我们能轻松地找到想要的元素。

# scraper.py (更新版)
import requests
from bs4 import BeautifulSoup # 导入 BeautifulSoup
url = 'http://books.toscrape.com/'
try:
    response = requests.get(url)
    response.raise_for_status()
    # 使用 BeautifulSoup 解析 HTML
    # 'html.parser' 是 Python 内置的解析器
    soup = BeautifulSoup(response.text, 'html.parser')
    # 现在我们可以用 soup 对象来“导航”这个网页了
    # 我们可以找到网页的标题
    page_title = soup.title.string
    print(f"网页标题是: {page_title}")
    # 找到所有书籍的 article 标签
    books = soup.find_all('article', class_='product_pod')
    print(f"在页面上找到了 {len(books)} 本书。")
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

关键点:

  • BeautifulSoup(response.text, 'html.parser'): 将 requests 获取的文本内容转换成一个 soup 对象。
  • soup.title: 获取 <title>
  • .string: 获取 <title> 标签里的文本内容。
  • soup.find_all(): 查找所有符合条件的标签,这是最常用的方法之一。
    • 'article': 查找所有 <article>
    • class_='product_pod': 查找 class 属性为 product_pod 的标签,注意,class 是 Python 的关键字,所以这里用 class_

第三步:提取你需要的数据

现在我们知道如何找到所有的书籍了,下一步是从每一本书的信息中提取出书名和价格。

观察一下 http://books.toscrape.com/ 的结构,你会发现每本书都在一个 <article class="product_pod"> 里。

  • 书名在 <h3> 标签下的 <a> 标签的 title 属性里。
  • 价格在 <p class="price_color"> 标签里。

让我们更新代码:

# scraper.py (最终版)
import requests
from bs4 import BeautifulSoup
url = 'http://books.toscrape.com/'
try:
    response = requests.get(url)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')
    books = soup.find_all('article', class_='product_pod')
    print(f"正在处理 {len(books)} 本书...")
    for book in books:
        # 提取书名
        # 找到 h3 标签,再找到其下的 a 标签,然后获取 'title' 属性
        title = book.h3.a['title']
        # 提取价格
        # 找到 class_='price_color' 的 p 标签,然后获取其文本内容
        price = book.find('p', class_='price_color').text
        print(f"书名: {title}")
        print(f"价格: {price}")
        print("-" * 30) # 打印一个分隔线
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

运行代码: 现在你会看到,程序逐行打印出每本书的书名和价格,这就是爬虫的核心逻辑!


第四步:存储数据(保存到文件)

打印在屏幕上数据会消失,我们通常需要将数据保存下来,比如保存到一个 CSV 文件中,这样可以用 Excel 打开。

我们需要一个新库:csv,这个库是 Python 自带的,不需要额外安装。

# scraper.py (存储数据版)
import requests
from bs4 import BeautifulSoup
import csv # 导入 csv 库
url = 'http://books.toscrape.com/'
# 准备一个列表来存储所有书籍信息
all_books_data = []
try:
    response = requests.get(url)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')
    books = soup.find_all('article', class_='product_pod')
    for book in books:
        title = book.h3.a['title']
        price = book.find('p', class_='price_color').text
        # 将每本书的信息作为一个字典存入列表
        all_books_data.append({
            'title': title,
            'price': price
        })
    # 将数据写入 CSV 文件
    # newline='' 是为了防止在 Windows 系统下写入时出现空行
    with open('books.csv', 'w', newline='', encoding='utf-8') as f:
        # 定义 CSV 文件的列名
        fieldnames = ['title', 'price']
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        # 写入表头
        writer.writeheader()
        # 写入数据
        writer.writerows(all_books_data)
    print("数据已成功保存到 books.csv 文件中!")
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

运行代码后: 你会发现在你的代码目录下多了一个 books.csv 文件,用 Excel 打开它,你会看到整齐的书名和价格数据。


完整代码示例:抓取“名言网”

让我们用学到的知识,抓取一个简单的网站:http://quotes.toscrape.com/ (一个专门练习爬取名言的网站)。

目标:获取页面上所有的名言和其作者。

# quotes_scraper.py
import requests
from bs4 import BeautifulSoup
url = 'http://quotes.toscrape.com/'
all_quotes = []
try:
    # 1. 发送请求
    response = requests.get(url)
    response.raise_for_status()
    # 2. 解析内容
    soup = BeautifulSoup(response.text, 'html.parser')
    # 3. 查找所有名言容器
    quotes = soup.find_all('div', class_='quote')
    # 4. 遍历并提取数据
    for quote in quotes:
        # 提取名言文本
        text = quote.find('span', class_='text').text
        # 提取作者
        author = quote.find('small', class_='author').text
        all_quotes.append({'text': text, 'author': author})
    # 5. 打印结果
    for q in all_quotes:
        print(f'"{q["text"]}" - {q["author"]}')
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

爬虫进阶与注意事项

恭喜你,你已经掌握了爬虫的基础!但真实世界更复杂,下面是一些重要的进阶知识和注意事项:

  • 反爬机制

    • User-Agent (用户代理):很多网站会检查请求的来源,我们可以伪装成浏览器。
      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'}
      response = requests.get(url, headers=headers)
    • IP 封禁:如果你在短时间内发送大量请求,你的 IP 可能会被封禁,解决方案是使用代理 IP
    • 验证码:网站可能会弹出验证码,让你证明自己是人类,处理验证码比较复杂,有时需要借助第三方服务。
  • 动态网页

    • 有些网站内容是通过 JavaScript 动态加载的,requests 只能获取到初始的 HTML,看不到动态加载的内容,这时你需要使用更强大的工具,如 SeleniumPlaywright,它们可以模拟一个真实的浏览器。
  • 遵守 robots.txt

    • 在访问一个网站前,最好先看看它的 robots.txt 文件(https://www.example.com/robots.txt),这个文件规定了哪些页面可以爬,哪些不可以,尊重规则是爬虫工程师的基本素养。
  • 数据存储

    • 除了 CSV,你还可以将数据保存到 JSON 文件,或者存入 数据库(如 SQLite, MySQL, MongoDB)中。

总结与学习资源

一个简单的爬虫流程就是:

  1. 明确目标:你想抓取哪个网站,什么数据?
  2. 分析网页:用浏览器开发者工具 (F12) 查看目标数据的 HTML 结构。
  3. 发送请求:使用 requests 库获取网页内容。
  4. :使用 BeautifulSoup 库解析 HTML,定位到数据所在的标签。
  5. 提取数据:从定位到的标签中,提取出你想要的文本或属性。
  6. 存储数据:将提取的数据保存到文件或数据库中。

继续学习的资源:

  • 官方文档
  • 练习网站
  • 进阶库
    • Selenium: 用于处理动态网页。
    • Scrapy: 一个功能强大的爬虫框架,适合构建大型、复杂的爬虫项目。
    • pandas: 用于数据处理和分析,可以轻松地将数据导入 DataFrame。

爬虫的世界非常广阔,充满了挑战和乐趣,从今天开始,动手去探索吧!遇到问题多搜索,多实践,你很快就能成为爬虫高手。

分享:
扫描分享到社交APP
上一篇
下一篇