初学者如何用 Python 写第一个爬虫?

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。

🔍 博客内容包括:

  • Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。
  • 大数据技术:涵盖Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper等相关技术。
  • 开发工具:分享常用开发工具(IDEA、Git、Mac、Alfred、Typora等)的使用技巧,提升开发效率。
  • 数据库与优化:总结MySQL及其他常用数据库技术,解决实际工作中的数据库问题。
  • Python与大数据:专注于Python编程语言的深度学习,数据分析工具(如Pandas、NumPy)和大数据处理技术,帮助您掌握数据分析、数据挖掘、机器学习等技术。
  • 数据结构与算法:总结数据结构与算法的核心知识,提升编程思维,帮助您应对大厂面试挑战。

🌟 我的目标:持续学习与总结,分享技术心得与解决方案,和您一起探索技术的无限可能!在这里,我希望能与您共同进步,互相激励,成为更好的自己。

📣 欢迎订阅本专栏,与我一起在这个知识的海洋中不断学习、分享和成长!💻🚀


📍版权声明:本博客所有内容均为原创,遵循CC 4.0 BY-SA协议,转载请注明出处。

目录

一、爬虫的基本概念

[1. 爬虫的定义](#1. 爬虫的定义)

[2. 爬虫的主要工作流程](#2. 爬虫的主要工作流程)

[3. 常用 Python 工具](#3. 常用 Python 工具)

二、环境准备

[1. 安装 Python](#1. 安装 Python)

[2. 安装必要库](#2. 安装必要库)

三、写第一个简单的爬虫

[1. 完整代码示例](#1. 完整代码示例)

[2. 代码逐步解析](#2. 代码逐步解析)

[1)发送 HTTP 请求](#1)发送 HTTP 请求)

2)检查请求状态

[3)解析 HTML 数据](#3)解析 HTML 数据)

4)提取网页内容

5)打印结果

四、改进爬虫功能

[1. 添加请求头](#1. 添加请求头)

[2. 控制爬取频率](#2. 控制爬取频率)

[3. 保存数据](#3. 保存数据)

五、应对复杂网页

[1. 动态加载网页](#1. 动态加载网页)

[2. 爬取图片或文件](#2. 爬取图片或文件)

六、爬虫的注意事项

[1. 遵守法律和道德](#1. 遵守法律和道德)

[2. 处理异常](#2. 处理异常)

[3. 避免过于频繁的请求](#3. 避免过于频繁的请求)


网页爬虫是一种通过程序自动抓取网页数据的技术。对于初学者来说,使用 Python 写一个简单的爬虫是一个很好的入门项目。Python 提供了许多强大的工具和库,如 requestsBeautifulSoup,可以帮助快速实现网页数据的爬取。

在本文中,我们将从爬虫的基本概念开始,逐步实现一个可以抓取网页内容的简单爬虫,并探讨如何改进爬虫以应对复杂场景。我们将从以下几个方面展开:


一、爬虫的基本概念

1. 爬虫的定义

爬虫(Web Crawler)是一种自动化脚本或程序,它会模拟用户访问网页的行为,从而提取网页中的特定内容。

2. 爬虫的主要工作流程

一个典型的爬虫任务通常包括以下步骤:

  • 发送请求:通过 HTTP 协议访问目标网页,获取其 HTML 内容。

  • 解析数据:对获取到的 HTML 进行解析,提取我们需要的数据。

  • 存储数据:将提取到的数据保存到文件或数据库中,便于后续处理。

3. 常用 Python 工具
  • requests:发送 HTTP 请求,获取网页内容。

  • BeautifulSoup:解析 HTML 或 XML 数据,提取特定内容。

  • re**(正则表达式)**:对复杂文本模式进行匹配和提取。

  • pandas:对数据进行清洗和分析。


二、环境准备

1. 安装 Python

确保你的计算机上已经安装了 Python(推荐使用 3.7 及以上版本)。如果尚未安装,可以从 Python 官方网站 下载并安装。

2. 安装必要库

打开命令行或终端,运行以下命令安装我们需要的 Python 库:

bash 复制代码
pip install requests beautifulsoup4
  • requests:用于发送 HTTP 请求。

  • beautifulsoup4:用于解析 HTML 数据。


三、写第一个简单的爬虫

我们来实现一个简单的爬虫,它将抓取某个网页的标题和正文内容。

1. 完整代码示例

以下代码实现了一个基本的爬虫:

python 复制代码
import requests
from bs4 import BeautifulSoup

def simple_crawler(url):
    try:
        # 1. 发送请求
        response = requests.get(url)
        response.raise_for_status()  # 检查请求是否成功

        # 2. 解析网页内容
        soup = BeautifulSoup(response.text, 'html.parser')

        # 3. 提取标题和段落内容
        title = soup.find('title').text  # 获取网页标题
        paragraphs = soup.find_all('p')  # 获取所有段落内容

        print(f"网页标题: {title}\n")
        print("网页内容:")
        for p in paragraphs:
            print(p.text)

    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")

# 示例网址
url = "https://example.com"  # 替换为你想爬取的网页地址
simple_crawler(url)
2. 代码逐步解析
1)发送 HTTP 请求
python 复制代码
response = requests.get(url)
  • 使用 requests.get() 方法向目标网址发送 GET 请求。

  • 返回的 response 对象包含网页的所有内容,包括 HTML 源代码。

2)检查请求状态
python 复制代码
response.raise_for_status()
  • 通过 raise_for_status() 检查请求是否成功。如果返回的 HTTP 状态码表示错误(如 404 或 500),会抛出异常。
3)解析 HTML 数据
python 复制代码
soup = BeautifulSoup(response.text, 'html.parser')
  • BeautifulSoup 用于解析 HTML 内容,并将其转化为 Python 对象,方便后续操作。

  • 第二个参数 'html.parser' 指定使用 Python 内置的 HTML 解析器。

4)提取网页内容
python 复制代码
title = soup.find('title').text
paragraphs = soup.find_all('p')
  • find('title') 方法返回 <title> 标签的内容。

  • find_all('p') 方法返回所有段落标签 <p>,并以列表形式存储。

5)打印结果
python 复制代码
for p in paragraphs:
    print(p.text)
  • 遍历提取到的段落内容,并打印每个段落的文本。

四、改进爬虫功能

1. 添加请求头

一些网站会检测爬虫程序并阻止访问。可以通过添加请求头来模拟浏览器访问。

python 复制代码
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)
2. 控制爬取频率

为了避免对目标网站造成过高的负载,可以在每次请求后添加延时。

python 复制代码
import time

def delay_request(url):
    response = requests.get(url)
    time.sleep(2)  # 等待 2 秒
    return response
3. 保存数据

将爬取的数据保存为文件或数据库。

保存到文件:

python 复制代码
with open("output.txt", "w", encoding="utf-8") as f:
    f.write(f"标题: {title}\n")
    for p in paragraphs:
        f.write(p.text + "\n")

保存到 CSV 文件:

python 复制代码
import csv

with open("output.csv", "w", newline="", encoding="utf-8") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["段落内容"])
    for p in paragraphs:
        writer.writerow([p.text])

五、应对复杂网页

1. 动态加载网页

对于 JavaScript 渲染的网页,requests 无法获取完整内容,可以使用 seleniumplaywright

示例(使用 selenium):

python 复制代码
from selenium import webdriver

url = "https://example.com"

# 配置 WebDriver
driver = webdriver.Chrome()
driver.get(url)

# 获取动态加载的内容
html = driver.page_source
print(html)

# 关闭浏览器
driver.quit()
2. 爬取图片或文件
python 复制代码
import os

# 下载图片
img_url = "https://example.com/image.jpg"
response = requests.get(img_url)

# 保存图片
with open("image.jpg", "wb") as f:
    f.write(response.content)

六、爬虫的注意事项

1. 遵守法律和道德
  • 避免违反法律:确保爬取行为符合目标网站的使用条款。

  • 尊重 robots.txt 文件 :通过 robots.txt 查看目标网站的爬取限制。

2. 处理异常

对于网络请求失败、数据缺失等情况,添加异常处理逻辑:

python 复制代码
try:
    response = requests.get(url)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")
3. 避免过于频繁的请求

可以设置延时或使用代理 IP:

python 复制代码
proxies = {
    "http": "http://123.45.67.89:8080",
    "https": "http://123.45.67.89:8080"
}
response = requests.get(url, proxies=proxies)
相关推荐
Hello-FPGA5 分钟前
QT 初体验
开发语言·qt
叫我DPT12 分钟前
分享一个python启动文件脚本(django示例)
数据库·python·django
_玖-幽17 分钟前
大数据分析02 基础语法差异
python·数据分析·go
coder777718 分钟前
js逆向分享
javascript·爬虫·python·算法·安全
QQ_77813297425 分钟前
从文本到视频:基于扩散模型的AI生成系统全解析(附PyTorch实现)
人工智能·pytorch·python
Cao12345678932130 分钟前
扫雷-C语言版
c语言·开发语言
天堂的恶魔94641 分钟前
QT —— 信号和槽(槽函数)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-016 Python数据结构与算法 25课题、量子算法
python·算法·青少年编程·量子计算·编程与数学
水w1 小时前
【Python爬虫】详细入门指南
开发语言·爬虫·python·scrapy·beautifulsoup
weixin_445054721 小时前
力扣刷题-热题100题-第35题(c++、python)
c++·python·leetcode