刚接触 Python 爬虫的新手是不是总遇到这些麻烦?用 Requests 发请求,返回的却是一堆乱码;好不容易拿到网页源码,用 BeautifulSoup 提取数据时,要么啥都抓不到,要么把无关内容全爬下来;更头疼的是,爬没几页就被网站封了 IP,连网页都打不开了。别着急,兔子哥当年零基础学爬虫时,第一次爬豆瓣电影就因为没加请求头,爬了两页就被反爬拦住,调试了半天才发现问题所在。今天就用最白话的方式,带大家从安装工具到实战案例,把 Requests 和 BeautifulSoup 的用法讲透,再分享新手最容易踩的坑和避坑技巧,一起往下看吧!
一、先搞懂:为啥学爬虫非得用这俩工具?
可能有朋友会问:“Python 爬虫工具那么多,为啥偏偏选 Requests 和 BeautifulSoup?” 这你就不知道了,这俩工具堪称爬虫界的 “黄金搭档”,简单又实用。
Requests 就像你的 “浏览器替身”,能帮你向网站发送请求,把网页源码 “拿” 回来,操作比 Python 自带的 urllib 简单多了,几行代码就能搞定请求发送。
BeautifulSoup 则是 “数据提取小能手”,拿到网页源码后,它能帮你快速定位到想要的内容,不管是标题、链接还是价格,用它找起来都特别方便,不用自己写复杂的正则表达式。
有位网友在论坛分享说:“之前用正则爬网页,改来改去总出错,换成 BeautifulSoup 后,提取数据效率直接翻倍,后悔没早点学!” 这也是为啥新手入门首选这俩工具的原因。
二、基础准备:3 步搞定环境搭建和工具安装
学爬虫前得先把 “工具” 备好,这三步简单易操作,新手跟着做准没错。
- 安装 Python 环境
如果还没装 Python,去官网(python.org)下载最新版,安装时记得勾上 “Add Python to PATH”,不然后面用命令行时会找不到程序。安装完成后,打开命令提示符,输python --version,能看到版本号就说明装好了。 - 安装 Requests 和 BeautifulSoup 库
这俩库不是 Python 自带的,得手动安装。打开命令提示符,输这两行命令:pip install requestspip install beautifulsoup4
等进度条走完,看到 “Successfully installed” 就说明安装成功了。有朋友反馈说安装慢,这时候可以加个国内镜像源,比如pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple,速度会快很多。 - 选个趁手的编辑器
新手推荐用 PyCharm 社区版(免费),界面清晰,代码补全功能强,写错了还会标红提示。当然用 IDLE 或 VS Code 也行,看个人习惯,兔子哥用的就是 PyCharm,写代码时能少踩不少拼写错误的坑。
三、实战案例:爬取豆瓣电影 Top250,数据提取全流程
光说不练假把式,用爬取豆瓣电影 Top250 的案例,带大家看看 Requests 和 BeautifulSoup 怎么配合用。
- 用 Requests 获取网页源码
第一步是让程序 “访问” 网页,拿到源码。代码如下:
python
import requests# 目标网页地址url = "https://movie.douban.com/top250?start=0"# 加请求头,伪装成浏览器(关键!不然容易被反爬)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"}# 发送请求response = requests.get(url, headers=headers)# 解决编码问题(避免中文乱码)response.encoding = response.apparent_encoding# 打印源码看看是否获取成功print(response.text[:500]) # 打印前500字符关键点: headers 一定要加!很多新手爬不到数据就是因为没加这个,网站会识别出你是爬虫,直接拒绝访问。
- 用 BeautifulSoup 提取数据
拿到源码后,用 BeautifulSoup 提取电影名、评分这些信息:
python
from bs4 import BeautifulSoup# 解析网页源码soup = BeautifulSoup(response.text, "html.parser")# 定位电影列表(先在网页F12检查元素,找到对应标签)movie_list = soup.find_all("div", class_="info")# 遍历提取数据for movie in movie_list:# 提取电影名title = movie.find("span", class_="title").text# 提取评分score = movie.find("span", class_="rating_num").text# 提取评价人数comment = movie.find("div", class_="star").find_all("span")[-1].textprint(f"电影名:{title},评分:{score},评价人数:{comment}")提取技巧:先在浏览器按 F12 打开开发者工具,找到数据对应的标签和 class 名,再用
find()或find_all()定位,比瞎猜靠谱多了。有新手朋友说找不到标签,其实多试试 “右键元素→复制→复制选择器”,就能拿到准确的定位信息。四、避坑指南:新手 90% 会踩的 5 个坑,这样解决
- 坑 1:请求被拒,返回 403 错误
这是最常见的问题,原因就是没加请求头或请求头太简单。解决方法:除了加User-Agent,还可以加Referer(告诉网站你从哪来的),比如爬豆瓣时加"Referer": "https://movie.douban.com/",模拟真实浏览行为。 - 坑 2:中文乱码,拿到的内容全是 “éÂÂé”
这是编码问题,Requests 默认编码可能和网页实际编码不一致。解决方法:用response.encoding = response.apparent_encoding让程序自动识别编码,比手动指定utf-8更靠谱。兔子哥第一次爬中文网页就因为没处理编码,结果数据全是乱码,还以为爬错了网站。 - 坑 3:提取不到数据,返回 None
要么是标签或 class 名写错了(注意 class 名可能有空格,比如class_="info item"),要么是数据在 iframe 框架里(这种情况 Requests 拿不到,得换 Selenium)。解决方法:先用print(soup.prettify())打印格式化的源码,搜一下目标内容在不在,再检查定位语句。 - 坑 4:爬几页就被封 IP
短时间内频繁请求网站会被识别为爬虫。解决方法:爬一页歇几秒,用time.sleep(2);或者用代理 IP,不过新手先掌握控制频率的方法就行,代理后面再学。 - 坑 5:网页是动态加载的,源码里没有目标数据
比如滚动页面才加载更多内容,这种数据是 JavaScript 动态生成的,Requests 拿不到原始数据。解决方法:要么分析 API 接口(用浏览器开发者工具的 Network 抓包),要么换 Selenium 模拟浏览器操作,新手先从静态网页练起。
五、UGC 经验分享:其他新手的实战心得
- 网友 “小爬虫” 说:“爬网页时一定要先保存源码到本地,用记事本打开看看结构,不然在代码里瞎调半天,都不知道是定位错了还是没拿到源码。”
- 网友 “数据小白” 分享:“提取数据时别贪多,先提取一个字段调试通了,再加其他字段,比如先爬电影名,成功后再加评分,一步步来不容易出错。”
- 网友 “踩坑王” 提醒:“别爬需要登录的网站!新手没处理 cookie 很容易失败,先爬公开数据,比如豆瓣、维基百科这些开放的网站练手。”
六、自问自答:爬虫新手常问的 3 个问题
- “爬别人的网站会不会违法?”
爬公开的非盈利数据没问题,但不能爬隐私数据(比如用户信息)、 copyrighted 内容(比如小说、视频),更不能频繁爬导致网站崩溃。爬之前最好看看网站的 robots 协议(比如https://movie.douban.com/robots.txt),遵守规则最重要。 - “Requests 和 BeautifulSoup 能爬所有网站吗?”
不行哦,动态加载、需要登录、有验证码的网站它们搞不定,这时候得学 Selenium、Scrapy 这些工具。但新手先把这俩学好,80% 的静态网站爬取需求都能满足。 - “怎么知道自己爬的数据对不对?”
爬下来后和网页对比,比如爬 10 条数据,手动在网页上数 10 条,看看内容是否一致。还可以用len()检查提取到的数据量,比如print(len(movie_list)),如果是 0 或数量不对,就说明哪里有问题。
结尾心得
Python 爬虫入门不难,关键是多动手练,遇到问题别慌。兔子哥的经验是,新手先从简单的静态网页开始,比如爬豆瓣电影、博客文章,把 Requests 的请求头、编码处理和 BeautifulSoup 的标签定位练熟。遇到报错别着急改代码,先打印中间结果看看问题出在哪 —— 是没拿到源码?还是定位错了?还是被反爬了?一步步排查,比瞎试代码管用。记住,爬虫的核心是 “模拟人类浏览行为”,别太激进,尊重网站规则,这样才能长久稳定地获取数据。坚持练几个案例,你会发现爬虫真的能帮你解决很多数据收集的问题!
标签: 正则表达式 beautifulsoup4
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~