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

ops/2025/1/15 15:45:25/

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

🔍 博客内容包括:

  • 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. 爬虫的定义

2. 爬虫的主要工作流程

3. 常用 Python 工具

二、环境准备

1. 安装 Python

2. 安装必要库

三、写第一个简单的爬虫

1. 完整代码示例

2. 代码逐步解析

1)发送 HTTP 请求

2)检查请求状态

3)解析 HTML 数据

4)提取网页内容

5)打印结果

四、改进爬虫功能

1. 添加请求头

2. 控制爬取频率

3. 保存数据

五、应对复杂网页

1. 动态加载网页

2. 爬取图片或文件

六、爬虫的注意事项

1. 遵守法律和道德

2. 处理异常

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. 完整代码示例

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

python">import requests
from bs4 import BeautifulSoupdef 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 timedef 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 csvwith 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 webdriverurl = "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)


http://www.ppmy.cn/ops/150325.html

相关文章

学习进程前的简单认知-体系结构与OS

冯诺依曼体系结构&#xff08;von Neumann architecture&#xff09; 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器。大部分都遵守冯诺伊曼体系。 这种体系结构的核心思想是将程序指令和数据存储在同一存储器中&#xff0c;并通过控制单元…

Java Web开发进阶——WebSocket与实时通信

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;广泛应用于需要实时数据交换的应用程序中。它能够实现服务器与客户端之间的双向通信&#xff0c;避免了传统 HTTP 请求/响应的延迟。结合 Spring Boot&#xff0c;开发实时通信应用变得更加高效与简便。 1. …

《Opencv》图像金字塔与采样

目录 一、简介 二、图像金字塔简介 三、上采样与下采样的原理 1. 下采样&#xff08;Downsampling&#xff09; 2. 上采样&#xff08;Upsampling&#xff09; 四、代码实现 五、结果展示 ​编辑 ​编辑 六、代码解析 1. 图像读取 2. 下采样 3. 上采样 4. 结果显示…

多身份定制化视频创作的新突破! Ingredients:可将多个特定身份照片整合进视频创作实现个性化视频生成。

在当今这个数字内容爆炸的时代&#xff0c;视频创作已成为连接人与人、传递信息与情感的重要桥梁。然而&#xff0c;如何高效、高质量地实现多身份定制化视频创作&#xff0c;一直是视频制作领域的一大挑战。近日&#xff0c;北京昆仑研究院的研究团队提出了一种名为“Ingredie…

从源码角度分析SpringMVC执行流程

文章目录 一、SpringMVC基本概述二、SpringMVC的执行流程三、SpringMVC源码的执行流程四、前端控制器根据请求获取处理器原理五、如何根据处理器获取处理器适配器六、SpringMVC拦截器执行源码解读七、处理器适配器执行方法原理 一、SpringMVC基本概述 SpringMVC是基于Servlet进…

手动实现一个循环顺序队列

#include <iostream>using namespace std;class Queue { private:int data[1024]; // 存储元素的数组int frontIndex; // 头指针int rearIndex; // 尾指针int size; // 当前队列中的元素个数public:// 构造函数Queue():frontInde…

使用 C# 制作图像的特写窗口

许多网站都会显示一个特写窗口&#xff0c;其中显示放大的图像部分&#xff0c;以便您可以看到更多细节。您在主图像上移动鼠标&#xff0c;它会在单独的图片中显示特写。此示例执行的操作类似。&#xff08;示例使用的一些数学运算非常棘手&#xff0c;因此您可能需要仔细查看…

vue运用uniapp框架开发企业微信小程序中常用的一些基础方法

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“vue运用uniapp框架开发企业微信小程序中常用的一些基础方法”。 作为一名程序员&#xff0c;很多代码都是忘了再用&#xff0c;用了再忘。 今天梳理下日常开发中常用到的一些基础的方法&#xff0c;以方便后期开…