
一、从0到1搭建爬虫环境:这些准备工作别偷懒
很多人卡在学爬虫的第一步,不是因为代码难,而是环境没搭对。就像做饭前要先准备好锅碗瓢盆,写爬虫前也得把“工具”备齐。我去年带过一个做新媒体的实习生,她想爬取小红书的笔记标题做选题分析,结果折腾了一下午,连Python都没装好——因为她漏掉了“Add Python to PATH”这个关键步骤。所以这部分你一定要仔细看,别让准备工作消耗你的热情。
先装Python:3分钟搞定核心工具
不管你用Windows还是Mac,装Python都很简单。直接去Python官网下载最新版(别选beta版,选稳定版),比如现在的3.12.x版本。安装时注意两点:Windows用户一定要勾选“Add Python to PATH”(默认可能不勾选,就在安装界面最下面),Mac用户直接一路“继续”就行。装完后按Win+R输入cmd(Windows)或打开终端(Mac),输入python version
,如果显示“Python 3.x.x”,就说明装好了。
为什么要装Python?因为它就像个“万能工具箱”,有很多现成的“工具”(库)可以直接用,不用你自己从零写代码。就像你做PPT不会自己画图标,而是用现成的素材库一样,Python的库能帮你省90%的力气。
选个顺手的编辑器:推荐这两款“小白友好型”
装完Python,还需要一个写代码的地方。别用记事本!太折磨人了。推荐两个免费又简单的编辑器:
我个人更推荐PyCharm,因为它会自动帮你管理“虚拟环境”(后面会说),对新手更友好。去年那个实习生一开始用VS Code,总忘记切换环境,后来换了PyCharm,报错少了一半。
必备库安装:一行代码搞定“爬虫发动机”
有了Python和编辑器,还需要“爬虫发动机”——也就是库。最常用的两个库是requests
和urllib
,前者更简单,后者是Python自带的。我 直接用requests
,它就像个“高级浏览器”,能帮你模拟人访问网页的过程。
安装requests
超简单:打开PyCharm的“终端”(底部有个Terminal按钮),输入pip install requests
,回车。如果提示“pip不是内部命令”,说明你装Python时没勾选PATH,回去重新装一次就行。如果下载慢,加个国内镜像源,比如pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
,速度会快很多。
为什么要装库?打个比方:Python本身就像一辆没装发动机的车,requests
就是发动机,装上它车才能跑。没有库,你得自己写几百行代码实现“访问网页”的功能,有了库,一行代码就搞定。
二、3步获取网页源代码:手把手带你写第一个爬虫
环境搭好了,现在进入正题——怎么用Python爬虫获取网页源代码。别紧张,就3个步骤:分析网页→发送请求→处理响应。我会用“爬取豆瓣电影首页源代码”做例子,你跟着抄代码就行,抄完就能跑。
第1步:分析目标网页——先搞懂“源代码”在哪
在写代码前,你得知道自己要“拿”什么。打开浏览器(推荐Chrome或Edge),输入目标网址,比如豆瓣电影首页,右键点击“查看网页源代码”(或按F12点Elements),弹出来的密密麻麻的HTML文本,就是我们要获取的“网页源代码”。
这里有个小技巧:按Ctrl+F搜索页面上的关键词(比如“正在热映”),能快速定位到这段内容在源代码里的位置。这一步的目的是确认:这个网页的源代码是“静态”的(直接能看到内容),还是“动态加载”的(需要点击或滚动才显示)。大部分公开网页都是静态的,比如新闻网站、博客,动态网页我们后面再说,新手先从静态开始。
第2步:发送HTTP请求——用代码“访问”网页
接下来用Python模拟人访问网页的过程。打开PyCharm,新建一个项目(选“Pure Python”),再新建一个.py文件(右键项目→New→Python File,随便起个名字,比如get_html.py
),然后输入这段代码:
import requests # 导入requests库
目标网页URL
url = "https://movie.douban.com/"
设置请求头(模拟浏览器访问,避免被识别为爬虫)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
发送GET请求
response = requests.get(url, headers=headers)
打印响应状态码(200表示成功)
print("请求状态码:", response.status_code)
这段代码做了什么?import requests
是把我们装的库“请”进来;url
是目标网页地址;headers
里的User-Agent是关键——它告诉网站服务器“我是Chrome浏览器,不是爬虫”。为什么要加这个?因为很多网站会拒绝没有User-Agent的请求(返回403错误)。你可以把自己浏览器的User-Agent复制过来:打开网页F12→Network→随便点一个请求→Headers→User-Agent,复制粘贴就行。
运行代码(右键文件→Run),如果输出“请求状态码:200”,说明请求成功了!如果是403,检查User-Agent有没有写错;如果是404,检查URL是不是输错了。
第3步:提取源代码——把网页内容“存”到本地
请求成功后,怎么拿到源代码?很简单,加一行代码:
# 获取网页源代码(字符串形式)
html = response.text
打印源代码(可选,测试用)
print(html)
把源代码保存到本地文件
with open("douban_movie.html", "w", encoding="utf-8") as f:
f.write(html)
现在运行代码,你会发现项目文件夹里多了一个douban_movie.html
文件,打开它,里面就是豆瓣电影首页的源代码——和你在浏览器里“查看网页源代码”看到的内容一模一样!
这里有个常见坑:如果打开文件发现中文乱码(比如显示“当家好”),是因为编码不对。在response.text
后面加一句response.encoding = response.apparent_encoding
,让Python自动识别编码,乱码问题就能解决。我之前帮朋友爬一个地方政府网站时,就遇到过GBK编码导致的乱码,加了这句代码就好了。
实战案例:3个场景帮你巩固(附避坑指南)
光说不练假把式,我再分享3个常见场景,你可以跟着练手:
场景1:爬取静态博客文章
比如爬取知乎专栏文章(把URL换成真实文章地址),步骤和上面一样,因为专栏文章都是静态加载的,直接用requests.get()
就能拿到源代码。
场景2:处理带参数的URL
有些网页URL带参数,比如“https://www.baidu.com/s?wd=Python爬虫”(wd是搜索关键词)。这种情况只需把完整URL赋值给url
,代码不用改。比如爬取百度搜索“Python爬虫”的结果页,直接用这个URL就行。
场景3:应对简单反爬(添加Cookie)
如果遇到“请求成功但返回空白页”,可能是网站需要登录状态。这时可以在headers
里加Cookie:打开网页F12→Network→请求→Headers→Cookie,复制过来加到headers里,格式是"Cookie": "你复制的Cookie内容"
。不过Cookie会过期,新手先不用深究,后面再学持久化登录。
为了帮你避开常见错误,我整理了一个表格,遇到问题时对照着查:
错误类型 | 可能原因 | 解决方法 |
---|---|---|
403 Forbidden | 没有设置User-Agent,被识别为爬虫 | 在headers里添加真实浏览器的User-Agent |
中文乱码 | 网页编码和保存编码不一致 | 添加response.encoding = response.apparent_encoding |
连接超时 | 网络慢或网站响应慢 | 添加timeout参数:requests.get(url, headers=headers, timeout=10) |
记住,爬虫要遵守“君子协议”——每个网站根目录下都有robots.txt
文件(比如豆瓣的是https://movie.douban.com/robots.txt),里面会说明哪些内容允许爬取。别爬需要登录的非公开数据,也别频繁发送请求(可以加time.sleep(1)
让爬虫歇1秒),不然可能被封IP哦。
现在你已经知道怎么用Python爬虫获取网页源代码了,是不是比想象中简单?其实爬虫就像一层窗户纸,捅破了发现核心逻辑很简单。你可以先从爬取个人博客、新闻网站这些简单页面开始练手,熟悉后再挑战更复杂的场景。如果运行代码时遇到报错,别慌,把错误信息复制到百度搜一下,90%的问题都有现成答案。试完记得回来告诉我,你第一个爬取的网页是什么呀?
你知道吗?爬网页时突然跳出“403 Forbidden”,就像你兴冲冲跑到商店门口,却被保安拦住说“抱歉,不让进”——这通常是网站把你的爬虫当成“不速之客”了。网站服务器每天要处理无数请求,为了防止被恶意爬虫拖垮,会设置一些“门槛”,最常见的就是检查你是不是“真人用浏览器访问”。咱们写的爬虫如果光秃秃地发请求,没带任何“身份证明”,服务器一看就知道“这不是正常用户”,直接就拒绝提供内容了,这就是403错误的主要原因。
那怎么让服务器相信你是“自己人”呢?最关键的就是给请求“加个身份证”——也就是User-Agent。这串字符串就像浏览器的“名片”,会告诉服务器“我是Chrome浏览器”“我是Safari”之类的信息。你肯定好奇这串东西在哪儿找吧?其实特别简单:打开你常用的浏览器(Chrome或者Edge都行),按F12调出开发者工具,点上面的“Network”选项卡,然后刷新一下你想爬的网页,左边会出现一堆请求,随便点一个(比如第一个),再点右边的“Headers”,往下翻一翻,就能看到“User-Agent”这一行,后面跟着的一长串就是咱们要的“名片”了。把它复制下来,在代码里的headers字典里加上一行"User-Agent": "你复制的那串内容"
,再运行爬虫试试——我之前帮朋友爬一个美食博客时,他就是因为没加这个,折腾了一下午都报403,加上之后三秒钟就拿到源代码了,特别神奇。
当然啦,403也可能有其他原因,比如网站需要登录后才能访问(这时候得加Cookie),或者你的IP访问太频繁被拉黑了(可以放慢爬取速度,比如每次请求后歇1-2秒)。但对新手来说,90%的403问题都是因为没设置User-Agent,所以遇到这个错误时,先检查你的请求头里有没有这行“名片”,基本都能解决。
零基础学爬虫需要先学多久Python?
其实不用学很久!零基础入门爬虫,掌握Python基础语法(比如变量、函数、列表、字典、循环)就够了,大概1-2周就能上手。重点是学会用requests库发送请求、处理响应,这些操作逻辑很简单,跟着教程抄代码练几次就能熟悉,不用等到精通Python再开始。
安装Python后,在cmd输入python显示“不是内部命令”怎么办?
这是因为安装时没勾选“Add Python to PATH”导致的。解决方法:如果刚安装完,重新运行安装包,选择“Modify”,勾选“Add Python to environment variables”;如果已经安装很久,手动添加环境变量:找到Python安装路径(默认在C:Users用户名AppDataLocalProgramsPythonPython3x),把该路径和路径下的Scripts文件夹添加到系统环境变量的“Path”里,重启cmd即可。
为什么爬取网页时会返回403错误?怎么解决?
403错误通常是因为网站识别出你是爬虫,拒绝提供内容。最常见的原因是请求头里没有设置User-Agent(告诉网站“你是浏览器”)。解决方法:在代码的headers里添加真实浏览器的User-Agent,获取方式:打开浏览器→按F12→Network→随便点一个请求→Headers→找到User-Agent,复制粘贴到代码中,格式是“User-Agent: 复制的内容”。
用爬虫获取网页源代码合法吗?需要注意什么?
合法,但要遵守“爬虫礼仪”。 查看网站的robots.txt协议(在网站根目录下,比如https://目标网站/robots.txt),里面会说明哪些内容允许爬取; 不要爬取需要登录的非公开数据(比如个人隐私、付费内容); 控制请求频率,避免短时间内发送大量请求(可以用time.sleep(1)让爬虫每爬一次歇1秒),以免给网站服务器造成压力,否则可能被封IP。
动态加载的网页(比如需要滚动加载的内容)能用这种方法爬取吗?
基础的requests库只能爬取“静态网页”(源代码里直接包含所有内容),如果网页内容是滚动或点击后才加载的(比如微博无限滚动、电商商品列表),这种“动态网页”用requests.get()只能拿到空数据。新手可以先掌握静态网页爬取,后续再学处理动态网页的方法,比如用Selenium模拟浏览器操作,或者分析网页的API接口(按F12→Network→XHR,找到加载数据的接口URL),难度会稍高一些,但逻辑类似。