前言

很多新手觉得爬虫是高深的黑客技术,其实完全不是。爬虫本质就是一个自动化访问网页、抓取公开数据的程序,和我们日常用浏览器打开网页、查看内容没有本质区别,只是把人工操作换成了代码自动执行。

市面上Java、Go、C#都可以写爬虫,但Python凭借极简的语法、海量成熟的爬虫第三方库,成为了爬虫领域的首选语言。本文全程无晦涩底层理论,零基础跟着敲代码即可成功运行。

一、搞懂基础:什么是网络爬虫?

1.1 通俗类比理解爬虫

我们可以把爬虫理解为不知疲倦的网页浏览机器人

  • 人工操作:打开浏览器→输入网址→浏览网页→复制需要的文字/图片→粘贴保存

  • 爬虫程序:代码自动发送请求→打开网页→自动筛选有效数据→自动保存到本地

二者访问网页的行为完全一致,区别只在于一个是人操作,一个是代码自动操作。

1.2 爬虫四大核心流程(全网通用)

  1. 发送网络请求:向目标网站服务器发送访问请求,告诉服务器我要访问这个网页

  2. 接收网页源码:服务器返回网页完整的HTML源代码,包含网页所有文字、链接、图片地址

  3. 解析提取数据:从杂乱的源码中,筛选出我们需要的标题、内容、链接等有效信息

  4. 持久化保存数据:将提取的数据保存到txt、csv表格或者数据库中,方便后续查看和使用

1.3 爬虫能做什么?(仅限公开合规数据)

  • 采集公开榜单数据:电影评分、音乐榜单、图书销量

  • 采集文案素材:古诗文、励志文案、新闻资讯

  • 行业数据分析:电商商品价格波动、天气历史数据

  • 批量下载资源:壁纸、公开图片、免费文档

重要前置提醒:爬虫只能爬取网站公开、无需登录即可查看的内容,严禁爬取隐私信息、付费内容、用户个人数据。

二、爬虫前置必备基础知识(零基础速通)

2.1 HTTP两种常用请求方式

日常爬虫只需要掌握两种请求,无需深入网络底层:

  • GET请求:最常用,单纯从网站获取数据,比如打开网页、查看文章,绝大多数静态网页都是GET请求

  • POST请求:向网站提交数据,比如登录账号、发布评论、提交表单,需要携带参数才能获取对应数据

2.2 网页基础认知

所有网页都是由HTML标签组成,比如标题标签<h1>、段落标签<p>、链接标签<a>。爬虫拿到的源码就是一堆标签代码,我们后续解析数据,本质就是定位对应的HTML标签,取出标签内的内容即可。

2.3 环境准备

  1. 安装Python3.8及以上版本(官网直接下载,默认安装即可)

  2. 安装三大爬虫核心库,直接复制下方命令到终端运行:

# 网络请求库
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文件!")

项目运行效果

  1. 代码运行无报错,控制台提示执行完毕

  2. 项目同级目录自动生成古诗词数据.csv文件

  3. 表格内整齐存放标题、作者、诗词正文,无需手动整理

五、新手爬虫高频报错+一站式解决方案

新手写爬虫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 合规爬虫三条准则

  1. 仅用于个人学习、数据分析,不用于商业盈利

  2. 添加随机休眠,降低访问频率,不给服务器造成压力

  3. 不绕过网站登录验证、不破解网站反爬机制窃取隐私


七、新手爬虫学习路线(循序渐进,少走弯路)

  1. 第一阶段:静态网页爬虫(本文内容):掌握requests、bs4、xpath,搞定绝大多数无反爬静态页面

  2. 第二阶段:动态网页爬虫:学习接口抓包、selenium模拟浏览器,解决JS渲染无法获取数据的问题

  3. 第三阶段:反爬对抗:学习IP代理、验证码识别、cookie持久化,应对网站基础反爬

  4. 第四阶段:爬虫工程化:学习Scrapy框架、分布式爬虫,开发大规模稳定爬虫项目


八、全文总结

网络爬虫只是一个自动化获取公开网页数据的工具,本身没有善恶,关键在于使用者如何运用。对于零基础学习者来说,不用畏惧爬虫的底层原理,先学会发送请求、解析数据、保存文件,就能实现大部分日常数据采集需求。

同时一定要牢记:技术有边界,法律无侥幸,坚守爬虫合规底线,只用爬虫做合法的学习和数据整理,才能安心玩转Python爬虫。

文末工具推荐

  • 浏览器开发者工具:F12抓包、复制xpath路径,爬虫必备

  • XPath Helper插件:快速调试xpath语法,无需反复运行代码

  • Postman:调试网络请求,提前测试接口可用性

更多推荐