
图1:Python爬虫核心流程 – HTTP请求与HTML数据提取
一、项目功能说明
这是Python网络爬虫领域最基础的实战项目,基于requests库发送网络请求、BeautifulSoup库解析HTML文档,实现轻量且实用的网页数据爬取功能,帮新手快速理解爬虫的核心原理和落地步骤:
- 发送GET HTTP请求,获取目标网页完整HTML源码,兼容网络异常处理
- 精准解析HTML结构,提取网页title标签中的网站标题
- 遍历提取网页所有a标签超链接,自动过滤javascript和锚点无效链接
- 提取p标签中的网页正文内容,支持内容截取和冗余过滤
- 自定义请求头User-Agent,模拟浏览器访问,规避网站403拦截机制
- 封装可复用爬虫函数,支持参数传入,便于后续功能扩展和二次开发
二、环境准备
开发本次项目,仅需安装两个Python第三方核心库,打开CMD/终端执行以下命令,一键完成安装(Python3.8及以上版本兼容):
– requests:Python最常用的网络请求库,轻量高效,支持GET/POST等所有请求方式;
– beautifulsoup4:专业的HTML/XML解析库,简化标签定位和数据提取,无需手写正则表达式。
三、完整代码实现
以下为完整可运行代码,注释覆盖核心逻辑和关键步骤,零基础小白也能轻松理解,直接复制到PyCharm/VS Code即可运行:
import requests
from bs4 import BeautifulSoup
import time # 导入时间库,用于添加请求延迟,规避反爬def web_spider(url):
“””
网页爬虫核心函数,实现标题、链接、正文的提取
:param url: 待爬取的目标网页URL地址
:return: 爬取成功返回数据字典,失败返回None
“””
# 配置请求头,模拟Chrome浏览器访问,解决403 Forbidden反爬
headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36”,
“Accept”: “text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8”,
“Accept-Language”: “zh-CN,zh;q=0.9”
}try:
# 发送GET请求,设置10秒超时,防止网络卡顿程序卡死
response = requests.get(url, headers=headers, timeout=10)
# 检查响应状态码,非200直接抛出异常,进入错误处理
response.raise_for_status()
# 强制设置编码为UTF-8,彻底解决网页中文乱码问题
response.encoding = “utf-8”
# 初始化BeautifulSoup,使用python内置解析器,无需额外安装
soup = BeautifulSoup(response.text, “html.parser”)# 1. 提取网页标题,做空值判断,避免程序报错
page_title = soup.title.string if soup.title else “该网页无标题”
print(f”\n 爬取结果 – 网页标题:{page_title}”)# 2. 提取网页所有有效超链接,仅展示前10个避免输出过多
print(“\n 爬取结果 – 网页有效链接(前10个):”)
all_links = soup.find_all(“a”, href=True) # 只获取带href属性的a标签
valid_links = [link for link in all_links if not link[“href”].startswith((“javascript:”, “#”, “mailto:”))]
for idx, link in enumerate(valid_links[:10], start=1):
print(f” {idx}. {link[‘href’]}”)# 3. 提取网页正文内容,仅展示前5段,每段截取前150字符
print(“\n 爬取结果 – 网页正文内容(前5段):”)
all_paragraphs = soup.find_all(“p”)
for idx, para in enumerate(all_paragraphs[:5], start=1):
para_text = para.get_text().strip() # 去除文本前后空格和换行
if para_text: # 过滤空的p标签
print(f” {idx}. {para_text[:150]}…” if len(para_text) > 150 else f” {idx}. {para_text}”)# 添加1秒请求延迟,模拟人类访问行为,降低被封IP风险
time.sleep(1)
# 封装爬取结果,返回字典便于后续数据处理
return {
“page_title”: page_title,
“valid_links”: valid_links,
“page_paragraphs”: all_paragraphs
}# 捕获所有requests请求异常,统一错误处理
except requests.exceptions.RequestException as e:
print(f”\n 爬取失败!错误原因:{str(e)}”)
return Nonedef main():
“””
主程序入口,处理用户输入,调用爬虫函数
“””
print(“=” * 60)
print(” 网页爬虫入门 v1.0 | 基于requests+BeautifulSoup”)
print(” 功能:网页标题提取 + 有效链接爬取 + 正文内容提取”)
print(” 适用:Python零基础小白 | 爬虫入门学习”)
print(“=” * 60)
# 获取用户输入的URL,做简单的格式处理
user_url = input(“\n请输入要爬取的网页URL(示例:https://www.example.com):”).strip()
# 自动补全HTTPS协议,避免用户输入无协议URL导致爬取失败
if not user_url.startswith((“http://”, “https://”)):
user_url = f”https://{user_url}”
print(f”🔧 自动补全协议,目标URL:{user_url}”)
# 调用爬虫函数执行爬取
web_spider(user_url)
print(“\n 爬虫程序执行完成!”)
# 程序入口,防止被导入时自动执行
if __name__ == “__main__”:
main()
四、运行效果演示
运行上述代码后,在控制台输入目标网页URL,即可完成自动爬取,以下为项目的实际运行效果(以example.com为例):
网页爬虫入门 v1.0 | 基于requests+BeautifulSoup
功能:网页标题提取 + 有效链接爬取 + 正文内容提取
适用:Python零基础小白 | 爬虫入门学习
============================================================
请输入要爬取的网页URL(示例:https://www.example.com):https://www.example.com
爬取结果 – 网页标题:Example Domain
爬取结果 – 网页有效链接(前10个):
1. https://www.iana.org/domains/example 爬取结果 – 网页正文内容(前5段):
1. This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.爬虫程序执行完成!
五、核心知识点总结
学习完本次实战,你将掌握爬虫开发的基础核心技能,为后续学习Scrapy框架、异步爬虫、动态网页爬取打下坚实基础:
- requests库核心用法:get()方法发送网络请求,headers配置请求头,timeout设置超时,raise_for_status()状态码校验;
- BeautifulSoup解析技巧:find_all()批量查找标签,get_text()提取标签文本,属性筛选过滤无效标签;
- 反爬基础规避:User-Agent模拟浏览器,请求延迟降低访问频率,UTF-8编码解决中文乱码;
- Python异常处理:捕获RequestException统一处理网络错误、超时、404/500等异常;
- 函数封装思想:将爬虫核心逻辑封装为函数,实现参数化调用和结果复用,符合Python工程化开发规范;
- URL格式处理:自动补全HTTP/HTTPS协议,过滤无效字符,提升程序的健壮性。
六、进阶扩展建议
掌握本次的基础功能后,可尝试扩展以下功能,逐步提升爬虫开发能力,实现更复杂的爬取需求:
- 数据持久化:将爬取的标题、链接、正文保存为CSV/JSON/Excel文件,替代控制台输出;
- 图片爬虫扩展:提取img标签的src属性,实现网页图片的批量下载和本地保存;
- 多页面爬取:遍历提取的超链接,实现递归爬取整个网站的内容,添加爬取深度控制;
- 代理IP轮换:配置proxies参数,使用免费/付费代理IP,规避网站IP封禁机制;
- 动态网页爬取:学习Selenium/Playwright库,应对JavaScript渲染的动态网页(如淘宝、抖音网页版);
- 爬虫框架学习:基于本次基础,入门Scrapy爬虫框架,实现高并发、分布式爬取。
七、爬虫入门必知 – 伦理与合法爬取规范
作为Python开发者,学习Python 网页爬虫入门不仅要掌握技术,更要遵守网络伦理和相关法律法规,做到合法、合规、负责任的爬取:
- 遵守robots.txt协议:爬取前访问「目标网站域名/robots.txt」,确认网站允许爬取的内容和限制;
- 控制爬取频率:避免短时间内高频请求,给服务器造成压力,建议添加1-3秒的随机延迟;
- 尊重版权归属:爬取的网页数据仅供个人学习、研究使用,切勿用于商业盈利或非法传播;
- 保护用户隐私:不爬取、不泄露网站中的个人隐私信息(如手机号、身份证、银行卡、住址等);
- 禁止恶意爬取:不利用爬虫攻击网站、破解付费内容、刷取数据,否则需承担相应的法律责任。
1. 本文是「Python实战案例10篇技术专栏」的第09篇,聚焦爬虫入门核心知识点,适合零基础小白;
2. 学习爬虫的核心是「多动手实践」,尝试爬取不同类型的静态网页,对比标签结构和解析方式;
3. 遇到反爬问题不要放弃,通过搜索引擎查找解决方案,是提升编程能力的最佳方式;
4. 后续将更新Scrapy框架实战教程,带你从「入门爬虫」升级为「专业爬虫开发」。
本文是Python实战案例10篇技术专栏的第09篇,专为Python零基础小白打造的Python 网页爬虫入门教程。
更多爬虫开发官方学习资源,可参考requests官方中文文档和BeautifulSoup4官方中文文档,这是Python爬虫开发的权威参考依据。
Python 网页爬虫入门
Python爬虫
requests库
BeautifulSoup4
HTML解析
Python网络爬虫
Python实战案例
爬虫入门教程

渝公网安备50022402001073号
Pingback: Python 经典实战案例 10 篇技术专栏目录 - 小白 编程 笔记
Pingback: Python实战案例:10篇经典技术专栏全目录 - 小白 编程 笔记
Pingback: Python 实战案例:10 篇经典技术专栏全目录,零基础从入门到实战 - 小白 编程 笔记