初学者如何用 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 库:

pip install requests beautifulsoup4
  • **requests**:用于发送 HTTP 请求。

  • **beautifulsoup4**:用于解析 HTML 数据。


三、写第一个简单的爬虫

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

1. 完整代码示例

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

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}
")
        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 请求
response = requests.get(url)
  • 使用 requests.get() 方法向目标网址发送 GET 请求。

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

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

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

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

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

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

四、改进爬虫功能
1. 添加请求头

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

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. 控制爬取频率

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

import time

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

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

保存到文件:

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

保存到 CSV 文件:

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):

from selenium import webdriver

url = "https://example.com"

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

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

# 关闭浏览器
driver.quit()
2. 爬取图片或文件
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. 处理异常

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

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

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

proxies = {
    "http": "http://123.45.67.89:8080",
    "https": "http://123.45.67.89:8080"
}
response = requests.get(url, proxies=proxies)
相关推荐
Ai 编码助手几秒前
Python 如何实现烟花效果的完整代码
开发语言·python·pygame
席子哥哥的代码库1 分钟前
爬虫下载B站视频简单程序(仅供学习)
python·学习
源码code6 分钟前
基于微信小程序的停车场管理系统的设计与实现
java·python·spring·tomcat
独坐寒江边9 分钟前
如何在Python用Plot画出一个简单的机器人模型
开发语言·python·机器人
Jelena1577958579215 分钟前
爬虫结合 t_nlp_word 文本语言词法分析接口:开启数据挖掘与分析的新篇章
爬虫·自然语言处理·word
心灵宝贝16 分钟前
Linux中jdk-8u291-linux-x64 中jdk工具包
java·linux·开发语言
Tiger Z25 分钟前
R 语言科研绘图第 29 期 --- 密度图-山脊线
开发语言·程序人生·r语言·贴图
Leo来编程32 分钟前
python学习第三天
开发语言·python
痕5171 小时前
VM+CentOS虚拟机
开发语言
每天减 1/5kg1 小时前
创建者——建造者模式
开发语言·python·建造者模式