爬虫--以爬取小说为例

目录


一、每日一言
二、练习题
三、效果展示
四、下次题目
五、总结


一、每日一言

好好的准备,写一个博客来提升质量,希望大家能够共同进步,可能每一个人都会有的状态,就是可能任务完成的并不是很好;

但是学习,在大学学校这件事一个重要的是,你不要花时间又没有效果,不要玩没有玩开心,学也没有学好;我知道你每天花时间,但是你的效率不高,明白的知识点没有深入,不是喜欢反思;所以一定要学会总结,最好把今天的事情和进步记录下来,这样你可以得到一个正向的反馈,同时你可以进一步的去发现你的困难,战胜困难时一件很爽的事情,所以一定要求去积极的克服,好好利用要求资源。

正确的学习:方向、效率、目标、计划

所以要提升专注力,去把心思放在重点上,为你的人生负责,一定休息,娱乐不是罪恶的,劳逸结合,好好利用该学的时候,一定要学好,多花时间搞懂,抱着好奇心去认真的学,你一定可以。

二、练习题

爬虫的基础知识--

|------|----------------|
| 爬虫 | 一个自动上网找信息的小机器人 |
| URL | 要去的网页地址 |
| 请求网页 | 打开网页,看里面有什么内容 |
| 提取数据 | 找出你想要的信息 |
| 保存数据 | 把信息记录下来,以后可以用 |

常见的库

requests-----打开网页,获取内容

BeautifulSoup------在网页里找需要的文字

time-----控制爬虫速度,让程序休息

os--------创建文件夹、管理文件

open()-------把内容保存到 txt 文件里

一、requests:上网员 ------ 去网上"下载"网页内容

📌 它是做什么的?

想象一下你要看一个网页,比如百度首页或者一本小说的页面。

如果你用浏览器打开它,其实就是你的电脑向服务器发出一个"我要看这个网页"的请求,然后服务器就把网页的内容发给你。

requests 就是 Python 中专门负责"发送请求"和"接收网页内容"的工具。

你可以把它理解为一个会自动帮你打开网页的"机器人",但它不会显示网页,而是把网页的内容直接保存下来。


🔍 举个生活中的例子:

你让同学帮你去图书馆拿一本书,他去了之后把书的内容一页页拍照发给你。

👉 在这里,"同学"就是 requests,他替你完成了"去拿书"的任务,并把内容带回给你。


✅ 它能做什么?

  • 发送请求,获取网页的 HTML 源码
  • 下载图片、文件等资源
  • 支持各种类型的请求(GET、POST 等)

🔍 二、BeautifulSoup:分析员 ------ 从网页中"提取"你需要的信息

📌 它是做什么的?

当你拿到网页的内容后,你会发现那是一大段看起来很乱的文字,里面有很多标签、样式、脚本等等。

这些内容虽然对计算机有意义,但对我们人来说很难直接读。

这时候就需要 BeautifulSoup 来帮忙了。

它的作用是从这堆杂乱的网页代码中找出你真正需要的部分,比如:

  • 标题
  • 正文内容
  • 图片链接
  • 所有章节的链接列表

你可以把它理解为一个"信息筛选器"或"内容提取器"。


🔍 举个生活中的例子:

你有一本厚厚的字典,想找"苹果"这个词的解释。

你不可能一页一页翻着找,所以你学会了用目录、索引、关键词查找的方法。

👉 BeautifulSoup 就像那个"查找关键词"的高手,帮你快速找到你想要的内容。


✅ 它能做什么?

  • 解析 HTML 或 XML 文档
  • 提取特定标签中的内容(如 <p><div><h1>
  • 查找具有特定属性的元素(如 id="content"
  • 获取所有符合条件的元素(如所有章节链接)

🤝 三、它们是怎么配合工作的?

我们可以把整个过程分成三个步骤:

第一步:用 requests 请求网页内容

就像让机器人去网站上"访问"这个页面,然后把整个页面的内容带回来。

第二步:把内容交给 BeautifulSoup

让它进行解析,找出结构。

第三步:使用 BeautifulSoup 的方法,提取你感兴趣的数据

比如标题、正文、图片链接、章节列表等。

打开命令提示符(Windows)或终端,输入以下命令:

python --version

这个命令可以查看python的版本。

环境----

🛠️ 常见的环境管理工具

工具名 特点
venv Python 自带的环境管理工具,适合初学者
conda Anaconda 自带的工具,适合做数据分析和机器学习

刚开始可以直接在默认的环境,安装requests库BeautifulSoup 库,

Win+R打开运行对话框,输入 CMD 回车,输入下面的命令,等待安装。

安装requests库

bash 复制代码
pip install requests

安装beautifulsoup4

bash 复制代码
pip install beautifulsuop4

如果下载嫌慢,可以使用镜像源

🔍 常见的国内镜像源(你知道几个?)

镜像源名称 地址
清华大学镜像站 Simple Index
阿里云镜像站 Simple Index
豆瓣镜像站 Simple Index
华为云镜像站 https://mirrors.huaweicloud.com/repository/pypi

方法一:临时使用(每次手动指定)

你只需要在 pip install 后面加上 -i 参数,指定你要使用的镜像源地址:

bash 复制代码
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple 

方法二:设置默认镜像源(以后都走这个"商店")

  1. 找到或创建 pip 的配置文件:
    • 路径一般是:C:\Users\你的用户名\pip\pip.ini
  2. 如果没有这个文件,就新建一个。
  3. 把下面这段内容复制进去:
bash 复制代码
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple 

文件位置因人而异,例如我的在

好了,开始写我们的代码吧。

浏览器打开小说主页,右键检查或者F12,

状态码为200,既可以访问

1xx:信息性状态码

这些状态码表示临时响应,通常用于告知客户端服务器已收到请求,但尚未完成处理。

  • 100 Continue:服务器已收到请求头,客户端可以继续发送请求体。

  • 101 Switching Protocols:服务器根据客户端的请求切换协议。

  • 102 Processing:服务器已收到请求,正在处理中(WebDAV 协议)。

2xx:成功状态码

这些状态码表示请求已成功处理。

  • 200 OK:请求成功,服务器返回了请求的资源。

  • 201 Created:请求成功,服务器创建了新的资源。

  • 202 Accepted:请求已接受,但尚未处理完成。

  • 204 No Content:请求成功,但没有返回内容。

  • 206 Partial Content:请求成功,返回部分内容(支持范围请求)。

3xx:重定向状态码

这些状态码表示客户端需要采取进一步操作才能完成请求。

  • 301 Moved Permanently:请求的资源已永久移动到新的 URL。

  • 302 Found:请求的资源临时移动到新的 URL。

  • 304 Not Modified:请求的资源未修改,客户端可以使用缓存版本。

  • 307 Temporary Redirect:请求的资源临时移动到新的 URL,但方法和实体不变。

  • 308 Permanent Redirect:请求的资源已永久移动到新的 URL,但方法和实体不变。

4xx:客户端错误状态码

这些状态码表示客户端请求有误,服务器无法处理。

  • 400 Bad Request:请求格式错误,服务器无法理解。

  • 401 Unauthorized:请求需要用户认证。

  • 403 Forbidden:服务器拒绝请求,即使提供认证也无法访问。

  • 404 Not Found:请求的资源未找到。

  • 405 Method Not Allowed:请求方法不被允许。

  • 408 Request Timeout:请求超时。

  • 429 Too Many Requests:客户端发送的请求过多,触发了限流机制。

5xx:服务器错误状态码

这些状态码表示服务器内部错误,无法正常处理请求。

  • 500 Internal Server Error:服务器内部错误,无法完成请求。

  • 501 Not Implemented:服务器不支持请求的功能。

  • 502 Bad Gateway:服务器作为网关或代理时,收到无效响应。

  • 503 Service Unavailable:服务器暂时无法处理请求(可能因为超载或维护)。

  • 504 Gateway Timeout:服务器作为网关或代理时,上游服务器超时。

  • 505 HTTP Version Not Supported:服务器不支持请求的 HTTP 版本。

2. 状态码的用途

状态码的主要用途是帮助客户端理解服务器对请求的处理结果。

元素当中涉及一些网页标签知识,

W3school

可以到这里进行查看

具体的代码:

python 复制代码
import requests
from bs4 import BeautifulSoup 

url = "https://m.zhangyue.com/readbook/12746233/2"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'


}
response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'html.parser')  

# 找到包含正文的大容器
main_body = soup.find("div", class_="h5_mainbody")

# 提取所有的段落(<p> 标签)
paragraphs = main_body.find_all("p")

# 把它们合并成一个字符串
content = "\n".join(p.get_text(strip=True) for p in paragraphs)

with open('大学问答.txt', 'w', encoding='utf-8') as file:
    file.write(content)

代码解释:

嘿嘿,这是deepseek的帮助,同时我肯定有不足的地方,还希望大家指正,我建立了一个问答群,大家有兴趣,帮助别人的,或者交流学习,可以进入。

谢谢!

python 复制代码
import requests  # 导入requests库,用于从网站获取数据(就像用浏览器打开网页)
from bs4 import BeautifulSoup  # 导入BeautifulSoup库,用于解析网页代码(像显微镜看网页结构)

# 要抓取的小说页面地址(注意:实际使用时需要确认网站允许爬取)
url = "https://m.zhangyue.com/readbook/12746233/2"

# 设置请求头------把自己伪装成普通浏览器访问(防止被网站识别为爬虫程序)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'
}

# 发送网络请求获取网页内容(相当于在浏览器地址栏输入网址)
response = requests.get(url, headers=headers)

# 用BeautifulSoup解析网页HTML代码(把网页源代码变成可操作的结构化数据)
soup = BeautifulSoup(response.text, 'html.parser')  

# ▼▼▼ 核心内容提取部分 ▼▼▼
# 在网页中找到小说正文容器(根据class名"h5_mainbody"定位,类似找特定包装的快递盒)
main_body = soup.find("div", class_="h5_mainbody")

# 在容器内找出所有段落(<p>标签相当于文章的自然段落)
paragraphs = main_body.find_all("p")

# 合并处理:把每个段落文本提取出来,用换行符连接(像把散落的珠子串成项链)
content = "\n".join(p.get_text(strip=True) for p in paragraphs)
# strip=True 表示清除每段文字前后的空白字符

# ▼▼▼ 保存结果部分 ▼▼▼
# 创建/打开大学问答.txt文件('w'模式表示写入,会覆盖旧文件)
with open('大学问答.txt', 'w', encoding='utf-8') as file:
    file.write(content)  # 将提取的小说内容写入文件

注意:实际进行网页抓取时,请务必遵守网站的robots.txt规定,尊重版权和网站服务条款。本示例仅用于教学目的。

三、效果展示

许多的字符串操作,可以在实战中记忆,边练边记,一起加油,我们一定可以的,相信自己,慢慢来,但不要停下来。

四、下次题目

敬请期待!

五、总结

一切都是最好的安排


相关推荐
蹦蹦跳跳真可爱5899 分钟前
Python----目标检测(《用于精确目标检测和语义分割的丰富特征层次结构》和R-CNN)
人工智能·python·深度学习·神经网络·目标检测·cnn
抽风的雨61031 分钟前
【python深度学习】Day 42 Grad-CAM与Hook函数
开发语言·python·深度学习
Mikhail_G1 小时前
Python应用for循环临时变量作用域
大数据·运维·开发语言·python·数据分析
人衣aoa1 小时前
Python编程基础(二)| 列表简介
开发语言·python
豆沙沙包?2 小时前
2025年- H61-Lc169--74.搜索二维矩阵(二分查找)--Java版
python·线性代数·矩阵
AntBlack2 小时前
计算机视觉 : 端午无事 ,图像处理入门案例一文速通
后端·python·计算机视觉
Freshman小白2 小时前
基于python脚本进行Maxwell自动化仿真
python·自动化
编程有点难4 小时前
Python训练打卡Day39
人工智能·python·深度学习
(・Д・)ノ4 小时前
python打卡day42
开发语言·python
椰椰椰耶4 小时前
[网页五子棋][匹配模块]处理开始匹配/停止匹配请求(匹配算法,匹配器的实现)
java·python·websocket·spring·java-ee