Python爬虫从0到1:一份面向完全初学者的指南
前言
很多新手觉得爬虫是高深的黑客技术,其实完全不是。爬虫本质就是一个自动化访问网页、抓取公开数据的程序,和我们日常用浏览器打开网页、查看内容没有本质区别,只是把人工操作换成了代码自动执行。
市面上Java、Go、C#都可以写爬虫,但Python凭借极简的语法、海量成熟的爬虫第三方库,成为了爬虫领域的首选语言。本文全程无晦涩底层理论,零基础跟着敲代码即可成功运行。
一、搞懂基础:什么是网络爬虫?
1.1 通俗类比理解爬虫
我们可以把爬虫理解为不知疲倦的网页浏览机器人:
-
人工操作:打开浏览器→输入网址→浏览网页→复制需要的文字/图片→粘贴保存
-
爬虫程序:代码自动发送请求→打开网页→自动筛选有效数据→自动保存到本地
二者访问网页的行为完全一致,区别只在于一个是人操作,一个是代码自动操作。
1.2 爬虫四大核心流程(全网通用)
-
发送网络请求:向目标网站服务器发送访问请求,告诉服务器我要访问这个网页
-
接收网页源码:服务器返回网页完整的HTML源代码,包含网页所有文字、链接、图片地址
-
解析提取数据:从杂乱的源码中,筛选出我们需要的标题、内容、链接等有效信息
-
持久化保存数据:将提取的数据保存到txt、csv表格或者数据库中,方便后续查看和使用
1.3 爬虫能做什么?(仅限公开合规数据)
-
采集公开榜单数据:电影评分、音乐榜单、图书销量
-
采集文案素材:古诗文、励志文案、新闻资讯
-
行业数据分析:电商商品价格波动、天气历史数据
-
批量下载资源:壁纸、公开图片、免费文档
重要前置提醒:爬虫只能爬取网站公开、无需登录即可查看的内容,严禁爬取隐私信息、付费内容、用户个人数据。
二、爬虫前置必备基础知识(零基础速通)
2.1 HTTP两种常用请求方式
日常爬虫只需要掌握两种请求,无需深入网络底层:
-
GET请求:最常用,单纯从网站获取数据,比如打开网页、查看文章,绝大多数静态网页都是GET请求
-
POST请求:向网站提交数据,比如登录账号、发布评论、提交表单,需要携带参数才能获取对应数据
2.2 网页基础认知
所有网页都是由HTML标签组成,比如标题标签<h1>、段落标签<p>、链接标签<a>。爬虫拿到的源码就是一堆标签代码,我们后续解析数据,本质就是定位对应的HTML标签,取出标签内的内容即可。
2.3 环境准备
-
安装Python3.8及以上版本(官网直接下载,默认安装即可)
-
安装三大爬虫核心库,直接复制下方命令到终端运行:
# 网络请求库
pip install requests
# 网页解析库
pip install beautifulsoup4
# xpath解析依赖库
pip install lxml
三、三大爬虫核心库手把手实战(带可运行源码)
3.1 requests库:爬虫第一步,发送网络请求
requests是Python最简洁的网络请求库,一行代码就能访问网页。新手最容易遇到403访问拒绝问题,原因是服务器识别出访问者是代码而非浏览器,添加请求头headers模拟浏览器即可解决。
实战代码:访问百度首页,获取网页源码
import requests
# 目标网址
url = "https://www.baidu.com"
# 请求头:模拟谷歌浏览器访问,伪装成真人浏览器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 发送GET请求
response = requests.get(url=url, headers=headers)
# 解决网页中文乱码
response.encoding = "utf-8"
# 打印网页状态码:200代表访问成功
print("网页状态码:", response.status_code)
# 打印网页源码
print(response.text)
运行结果:返回200状态码,同时打印百度首页完整源码,代表请求成功。
3.2 BeautifulSoup:静态网页数据解析,新手友好
拿到源码后,需要用解析库提取数据。
BeautifulSoup语法通俗易懂,适合新手入门,常用find()匹配单个标签、find_all()匹配所有同类型标签。
实战代码:提取百度首页所有超链接
from bs4 import BeautifulSoup
import requests
url = "https://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
response.encoding = "utf-8"
# 实例化解析对象
soup = BeautifulSoup(response.text, "lxml")
# 查找页面所有a链接标签
a_list = soup.find_all("a")
# 遍历提取链接和文字
for a in a_list:
title = a.get_text().strip()
href = a.get("href")
if title and href:
print(f"链接文字:{title},链接地址:{href}")
3.3 XPath:行业主流解析方式,效率更高
对比BeautifulSoup,XPath定位速度更快、语法更简洁,是爬虫工程师日常首选工具。借助浏览器自带的xpath复制功能,无需手写复杂语法,精准定位网页任意内容。
四、完整实战项目:爬取古诗文网经典诗词(合规无反爬)
我们选取公开无反爬、允许爬虫的古诗文网作为实战站点,完整实现:抓取诗词标题、作者、正文,并且自动保存为CSV表格,全程代码逐行注释,直接复制即可运行。
import requests
from lxml import etree
import csv
# 1. 基础配置
url = "https://www.gushiwen.cn/"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 2. 发送请求获取源码
res = requests.get(url, headers=headers)
res.encoding = "utf-8"
html = etree.HTML(res.text)
# 3. xpath批量解析数据
poem_titles = html.xpath('//div[@class="cont"]//b/text()')
poem_authors = html.xpath('//p[@class="source"]/a[1]/text()')
poem_contents = html.xpath('//div[@class="contson"]/text()')
# 4. 数据写入csv表格
with open("古诗词数据.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
# 写入表头
writer.writerow(["诗词标题", "作者", "诗词内容"])
# 循环写入每一条数据
for title, author, content in zip(poem_titles, poem_authors, poem_contents):
writer.writerow([title, author, content.strip()])
print("爬虫执行完毕,古诗词数据已保存至本地CSV文件!")
项目运行效果
-
代码运行无报错,控制台提示执行完毕
-
项目同级目录自动生成
古诗词数据.csv文件 -
表格内整齐存放标题、作者、诗词正文,无需手动整理
五、新手爬虫高频报错+一站式解决方案
新手写爬虫90%的报错都是以下四类,整理好直接对照修复即可:
|
报错码/问题 |
报错原因 |
解决办法 |
|---|---|---|
|
403 Forbidden |
服务器识别为爬虫,拒绝访问 |
添加User-Agent请求头,模拟浏览器 |
|
404 Not Found |
网页地址错误、页面已失效 |
核对url地址,检查网页是否下架 |
|
网页中文乱码 |
网页编码格式不匹配 |
添加response.encoding = "utf-8" |
|
请求超时Timeout |
网络波动、服务器限制访问速度 |
添加timeout超时参数,同时time.sleep()休眠 |
六、重中之重:爬虫法律红线,千万不要踩坑
很多新手误以为爬虫随便写都没事,实际上爬虫有明确的法律边界,这也是本文必须强调的内容:
6.1 什么是robots协议?
几乎所有网站都有robots.txt协议(访问格式:网址+/robots.txt),里面写明了网站哪些页面允许爬虫访问,哪些禁止。爬虫开发前建议先查看该文件,尊重网站规则。
6.2 绝对禁止爬取的内容
-
用户手机号、身份证、聊天记录等个人隐私数据
-
网站付费课程、付费文章、会员专属内容
-
企业内部数据、政务涉密数据
-
高频次疯狂请求,攻击网站服务器
6.3 合规爬虫三条准则
-
仅用于个人学习、数据分析,不用于商业盈利
-
添加随机休眠,降低访问频率,不给服务器造成压力
-
不绕过网站登录验证、不破解网站反爬机制窃取隐私
七、新手爬虫学习路线(循序渐进,少走弯路)
-
第一阶段:静态网页爬虫(本文内容):掌握requests、bs4、xpath,搞定绝大多数无反爬静态页面
-
第二阶段:动态网页爬虫:学习接口抓包、selenium模拟浏览器,解决JS渲染无法获取数据的问题
-
第三阶段:反爬对抗:学习IP代理、验证码识别、cookie持久化,应对网站基础反爬
-
第四阶段:爬虫工程化:学习Scrapy框架、分布式爬虫,开发大规模稳定爬虫项目
八、全文总结
网络爬虫只是一个自动化获取公开网页数据的工具,本身没有善恶,关键在于使用者如何运用。对于零基础学习者来说,不用畏惧爬虫的底层原理,先学会发送请求、解析数据、保存文件,就能实现大部分日常数据采集需求。
同时一定要牢记:技术有边界,法律无侥幸,坚守爬虫合规底线,只用爬虫做合法的学习和数据整理,才能安心玩转Python爬虫。
文末工具推荐
-
浏览器开发者工具:F12抓包、复制xpath路径,爬虫必备
-
XPath Helper插件:快速调试xpath语法,无需反复运行代码
-
Postman:调试网络请求,提前测试接口可用性
更多推荐

所有评论(0)