多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Python爬虫入门:零基础2小时掌握requests与BeautifulSoup实战

Python爬虫入门:零基础2小时掌握requests与BeautifulSoup实战 不要任何基础2小时速通Python爬虫专为0基础小白打造的Python爬虫教程你是不是经常看到别人用Python爬虫轻松获取数据自己却觉得门槛太高或者尝试过几次总是在环境配置、代码报错、反爬虫机制面前败下阵来今天这篇文章我要告诉你一个事实Python爬虫的核心逻辑远比大多数人想象的要简单。你不需要精通计算机网络也不需要理解复杂的异步编程更不需要被那些“从入门到放弃”的教程吓退。这篇文章的目标很明确让一个完全零基础的小白在2小时内真正理解爬虫是什么、能做什么并且亲手运行第一个能工作的爬虫脚本。我不会讲那些华而不实的理论也不会堆砌一堆你暂时用不上的高级库。我们将从一个最核心、最经典的“请求-解析-存储”流程出发用最少的代码解决最实际的问题——从网页上抓取你需要的信息。读完这篇文章你将彻底搞懂爬虫的本质是什么它和你手动复制粘贴有什么区别零基础需要准备什么如何用最简单的方式搭建Python环境。爬虫的核心三步走如何发送请求、如何解析网页、如何保存数据。第一个实战项目爬取一个公开的、无反爬的网站比如豆瓣电影Top250并保存到Excel。你会遇到哪些“坑”以及如何用最基础的方法绕过它们。我们开始吧。1. 这篇文章真正要解决的问题为什么你学不会爬虫很多新手学爬虫失败不是因为笨而是因为教程的起点错了。他们一上来就让你学urllib、asyncio、Scrapy框架讲HTTP状态码、User-Agent、Cookie池。这些知识重要吗重要。但对零基础的你来说它们就像还没学会走路就被要求理解空气动力学去跑步。爬虫最核心的思维其实是“模拟浏览器访问 提取规律信息”。你平时怎么在浏览器里看网页输入网址 - 浏览器请求 - 服务器返回HTML - 浏览器渲染成你看到的图文。爬虫就是把这个过程自动化用代码代替你输入网址用代码接收服务器返回的HTML再用代码从这一大堆“源代码”里把你想要的那部分文字、链接、图片地址“抠”出来。所以零基础学爬虫第一步不是学复杂的库而是建立这个“模拟-提取”的思维模型。一旦这个模型建立起来后面所有的技术细节都是为了解决这个模型在实际运行中遇到的具体问题比如“网站不让我模拟了怎么办”反爬虫、“网页加载太慢了怎么办”异步、“数据太多了怎么办”框架和分布式。本文将严格遵循这个思路先带你用最基础的库requests和BeautifulSoup跑通整个核心流程建立信心。在这个过程中你会自然遇到一些初级“坑”我们再一一解决。这样学路径最短成就感最强。2. 基础概念与核心原理在动手之前我们用3分钟把几个最关键的概念说清楚。放心没有任何难懂的术语。2.1 什么是爬虫爬虫Web Crawler/Spider就是一段自动访问互联网网页并抓取数据的程序。你可以把它想象成一个不知疲倦的、速度极快的“复制粘贴机器人”。手动操作你打开浏览器 - 访问豆瓣电影Top250页面 - 用眼睛找到电影名 - 打开Excel - 手动输入。爬虫操作你写一段代码 - 代码自动访问豆瓣电影Top250页面 - 自动从网页代码里找到所有电影名的位置 - 自动把所有名字保存到一个文件里。2.2 爬虫的基本工作流程核心三步走这是本文的基石务必理解发送请求Request你的程序向目标网站的服务器说“喂把某某网页的内容发给我”。这就像你在浏览器地址栏输入网址后敲回车。获取响应Response网站服务器收到请求后会把网页的“源代码”主要是HTML格式打包好发回给你的程序。这就像浏览器收到了网页数据。解析与存储Parse Save你的程序拿到这堆“源代码”它是一堆包含各种标签的文本对人来说很乱但对程序来说有规律可循然后从中提取出你需要的信息如电影名、评分、链接最后把这些信息保存到文件如TXT、CSV、Excel或数据库里。整个过程的核心是找到规律。你要告诉程序电影名在源代码里是被span classtitle和/span这样的标签包起来的。程序的工作就是找到所有这样的标签并把里面的文字拿出来。2.3 我们将要使用的“武器”为了让第一步尽可能简单我们选择Python社区最流行、最易用的两个库requests专门用于“发送请求”和“获取响应”。它用起来比Python自带的urllib简单十倍一句话就能搞定网页下载。BeautifulSoup简称bs4专门用于“解析”HTML/XML文档。它提供了一套非常直观的方法让你能像点名一样通过标签名、属性值来找到你想要的数据。它们的组合是Python爬虫入门公认的“黄金搭档”。3. 环境准备与前置条件“工欲善其事必先利其器”。搭建环境是很多新手的第一个拦路虎我们用一个最稳妥、最通用的方案。3.1 安装Python如果你还没有安装Python请按以下步骤操作访问官网打开浏览器访问 python.org 。下载安装包点击 “Downloads”选择你的操作系统Windows/macOS/Linux。对于Windows用户务必记得在安装时勾选 “Add Python to PATH” 这个选项这是避免后续在命令行中找不到python命令的关键。验证安装安装完成后打开“命令提示符”Windows或“终端”macOS/Linux。输入以下命令并按回车python --version如果显示类似Python 3.8.10的版本信息说明安装成功。如果提示“不是内部或外部命令”请重新安装并确认勾选了“Add Python to PATH”。3.2 安装必要的库我们将使用pipPython的包管理工具来安装requests和beautifulsoup4。同样在命令行中依次输入以下两条命令并执行pip install requests pip install beautifulsoup4注意如果速度慢或失败可以使用国内镜像源加速例如pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple pip install beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple安装成功后环境就准备好了。你可以关闭命令行窗口了。3.3 选择你的代码编辑器写代码需要一个文本编辑器。你可以使用任何你喜欢的比如VSCode免费、强大、插件丰富推荐新手使用。PyCharm Community专门为Python设计的IDE功能齐全。记事本/文本编辑也可以但不方便调试。本文的代码示例将保持最大的兼容性你可以在任何编辑器中编写并运行。4. 核心流程拆解从零编写第一个爬虫现在我们正式进入实战环节。我们将爬取一个非常适合练手的公开网站豆瓣电影Top250。这个网站结构清晰没有复杂的反爬机制是学习爬虫的经典目标。我们的目标是爬取第一页的25部电影的名称、评分和详情页链接。4.1 第一步观察目标与分析网页结构关键在写代码之前我们必须先“人肉”观察一下网页。这是爬虫成功与否的决定性步骤。用浏览器打开 豆瓣电影Top250 。在页面上右键 - 检查或按F12打开“开发者工具”。点击开发者工具左上角的箭头图标或按CtrlShiftC然后将鼠标移动到网页中的任意一个电影条目比如“肖申克的救赎”上并点击。此时开发者工具会自动定位到显示这部电影信息的HTML代码区域。你会发现规律每一个电影条目都包裹在一个div classitem的标签里。在这个div内部电影名位于span classtitle标签内。评分位于span classrating_num标签内。详情页链接位于a href...标签的href属性中。我们的任务就是写代码让程序自动找到所有classitem的div然后在每个div里分别提取出上述信息。4.2 第二步发送请求获取网页源代码打开你的代码编辑器新建一个文件命名为douban_spider.py。首先我们要导入刚才安装的库然后用requests去获取网页内容。# douban_spider.py import requests from bs4 import BeautifulSoup # 1. 定义目标URL豆瓣电影Top250第一页 url https://movie.douban.com/top250 # 2. 定义一个请求头这是为了让自己看起来更像一个“浏览器”避免被最简单的反爬机制拦截 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 } # 3. 发送GET请求获取服务器响应 response requests.get(url, headersheaders) # 4. 检查请求是否成功状态码200表示成功 if response.status_code 200: # 将响应的内容网页HTML源代码以文本形式保存到变量 html_content 中 html_content response.text print(网页请求成功) # 可以先打印前500个字符看看内容 # print(html_content[:500]) else: print(f请求失败状态码{response.status_code})代码解释import ...: 引入我们需要的工具。headers: 这是模拟浏览器的关键。服务器会通过User-Agent来判断访问者是谁。使用一个常见的浏览器UA能让我们的请求更“合法”。requests.get(): 这是requests库最核心的函数用于发起一个GET请求。response.status_code: 响应状态码。200成功404页面不存在500服务器错误等。response.text: 服务器返回的HTML源代码正是我们需要解析的内容。运行一下这段代码在文件所在目录打开命令行输入python douban_spider.py如果看到“网页请求成功”恭喜你最基础的一步已经完成了4.3 第三步解析HTML提取目标数据现在我们手里有了一团乱麻似的HTML文本 (html_content)。接下来要用BeautifulSoup把这团乱麻理顺并抽出我们想要的丝线数据。在上一步的代码后面继续添加# 5. 使用BeautifulSoup解析HTML内容指定解析器为‘html.parser’ soup BeautifulSoup(html_content, html.parser) # 6. 查找所有 classitem 的 div 标签每一个对应一部电影 movie_items soup.find_all(div, class_item) # 7. 遍历每一个电影条目提取具体信息 for item in movie_items: # 提取电影名称注意中文名在第一个 span.title 里可能还有英文名在第二个 title_tag item.find(span, class_title) # 使用 .string 属性获取标签内的文本如果找不到标签则返回空字符串 title title_tag.string if title_tag else 未找到名称 # 提取评分 rating_tag item.find(span, class_rating_num) rating rating_tag.string if rating_tag else 未找到评分 # 提取详情页链接 # 先找到包含链接的 a 标签它通常在 classhd 的 div 里 link_tag item.find(div, class_hd).find(a) if item.find(div, class_hd) else None link link_tag[href] if link_tag else 未找到链接 # 打印提取到的信息 print(f电影{title} | 评分{rating} | 链接{link})代码解释BeautifulSoup(html_content, html.parser): 创建一个BeautifulSoup对象它装载了HTML内容并提供了各种查找方法。soup.find_all(div, class_item):这是核心find_all方法会找到HTML中所有符合条件的标签。这里我们找到所有class属性为item的div标签返回一个列表。item.find(span, class_title): 在单个电影条目 (item) 中使用find方法查找第一个符合条件的标签class为title的span。.string: 获取标签内的文本内容。if ... else ...: 这是一个简单的容错处理。如果找不到某个标签比如网页结构有微小变动程序不会崩溃而是赋予一个默认值。link_tag[href]: 获取标签的属性值。这里获取a标签的href属性即链接地址。再次运行程序。你应该能在控制台看到25行输出每一行都是一部电影的名称、评分和链接。这一刻你的第一个爬虫已经成功了4.4 第四步保存数据到文件把数据打印在屏幕上只是第一步我们通常需要保存下来。这里我们选择保存到CSV文件一种可以用Excel打开的表格格式。在打印信息的循环结束后添加数据保存的代码。我们需要先收集所有数据再一次性写入文件。修改你的代码整体结构如下import requests from bs4 import BeautifulSoup import csv # 导入csv模块用于写文件 url https://movie.douban.com/top250 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 } response requests.get(url, headersheaders) if response.status_code 200: html_content response.text soup BeautifulSoup(html_content, html.parser) movie_items soup.find_all(div, class_item) # 创建一个列表来存储所有电影数据每个电影是一个字典 movies_data [] for item in movie_items: title_tag item.find(span, class_title) title title_tag.string if title_tag else N/A rating_tag item.find(span, class_rating_num) rating rating_tag.string if rating_tag else N/A link_tag item.find(div, class_hd).find(a) if item.find(div, class_hd) else None link link_tag[href] if link_tag else N/A # 将每部电影的信息存入字典并添加到列表中 movies_data.append({ title: title, rating: rating, link: link }) # 仍然在控制台打印方便查看进度 print(f已抓取{title}) # 将数据写入CSV文件 csv_filename douban_top250_page1.csv # 定义CSV文件的列名 fieldnames [title, rating, link] with open(csv_filename, w, newline, encodingutf-8-sig) as csvfile: writer csv.DictWriter(csvfile, fieldnamesfieldnames) writer.writeheader() # 写入表头 writer.writerows(movies_data) # 写入所有数据行 print(f\n数据已成功保存到文件{csv_filename}) else: print(f请求失败状态码{response.status_code})代码解释import csv: 导入Python内置的CSV模块。movies_data []: 创建一个空列表用于在循环中积累每一部电影的数据字典格式。movies_data.append({...}): 将每部电影的信息作为一个字典添加到列表中。with open(...) as csvfile:: 使用with语句打开或创建一个文件这样可以确保文件在使用后被正确关闭。encodingutf-8-sig: 指定文件编码为UTF-8 with BOM这是为了在Excel中打开时能正确显示中文。csv.DictWriter: 创建一个字典写入器它可以根据我们提供的fieldnames列名将字典数据写入CSV文件。writer.writeheader()和writer.writerows(): 分别写入表头和所有数据行。运行这段完整的代码。程序执行完毕后你会在douban_spider.py同一个文件夹下发现一个新生成的douban_top250_page1.csv文件。用Excel或文本编辑器打开它你会看到一个整洁的表格包含了25部电影的信息。5. 运行结果与效果验证运行上面的完整代码你应该在控制台看到类似以下的输出网页请求成功 已抓取肖申克的救赎 已抓取霸王别姬 已抓取阿甘正传 ... 已抓取窃听风暴 数据已成功保存到文件douban_top250_page1.csv如何验证成功控制台输出程序没有报错如ConnectionError,KeyError等并且按顺序打印出了25个电影名。文件生成在脚本所在目录生成了douban_top250_page1.csv文件。文件内容用Excel或记事本打开该CSV文件确认有三列title, rating, link并且有25行数据加上表头是26行中文显示正常。如果以上三点都符合那么恭喜你你的第一个Python爬虫项目已经圆满成功你已经完整地走过了“发送请求 - 解析数据 - 保存数据”的全流程。6. 常见问题与排查思路作为新手你几乎一定会遇到下面这些问题。别担心它们都有明确的解决路径。问题现象可能原因排查方式解决方案运行脚本后没有任何输出或立即闪退1. 代码有语法错误。2. 没有在命令行中正确进入脚本所在目录。1. 在命令行中运行python douban_spider.py仔细看错误信息通常是SyntaxError。2. 使用cd命令切换到脚本所在文件夹再运行。1. 根据错误信息修改代码常见错误缩进不对、冒号缺失、括号不匹配。2. 在文件资源管理器地址栏输入cmd回车可直接在当前目录打开命令行。报错ModuleNotFoundError: No module named ‘requests’requests库没有安装成功或安装在了其他Python环境。在命令行中运行pip list查看已安装的包列表中是否有requests和beautifulsoup4。重新执行pip install requests beautifulsoup4。如果电脑有多个Python确认你正在使用的python和pip是同一个版本的可用python -m pip install来安装。请求失败状态码为 403目标网站识别出这是爬虫请求拒绝了访问。这是最常见的反爬虫手段。检查代码中的headers是否设置特别是User-Agent是否是一个有效的浏览器标识。1.确保headers字典已正确添加在requests.get()调用中。2. 可以尝试更新User-Agent字符串在网上搜索“最新User-Agent”替换。请求失败状态码为 404输入的URL地址错误。核对代码中的url变量是否和浏览器地址栏的网址完全一致。复制浏览器中目标网页的完整地址替换代码中的url。能打印“请求成功”但movie_items是空的抓不到数据1. 网页结构已经发生变化class’item’的div不存在了。2. 网站需要登录或JavaScript渲染直接请求拿到的HTML里没有数据。1. 再次使用浏览器的“检查”功能确认电影条目外层的标签和类名是否还是div class”item”。2. 将html_content保存到一个.html文件用浏览器打开看是否包含可见的电影信息。1. 根据新的网页结构修改soup.find_all()里的查找条件。2. 对于需要JS渲染的网站入门阶段建议换一个静态网站练习如其他榜单、新闻网站。进阶需要使用Selenium或Playwright等工具。保存的CSV文件用Excel打开中文是乱码Excel对UTF-8无BOM编码支持不友好。用记事本打开CSV文件如果中文正常则是Excel的问题。在代码中open()函数里将encoding’utf-8’改为encoding’utf-8-sig’。只能抓到第一页25条数据我们的代码只请求了第一页的URL。观察豆瓣Top250的翻页规律第二页URL是?start25filter第三页是?start50filter。可以使用一个循环批量生成不同页码的URL然后重复执行抓取和解析流程。7. 最佳实践与工程建议当你成功运行第一个爬虫后如果想走得更远更稳下面这些建议至关重要。7.1 遵守Robots协议与法律法规这是红线绝对不能碰。Robots协议在网站根目录下通常有一个robots.txt文件如https://douban.com/robots.txt。这个文件规定了哪些页面允许爬取哪些禁止。虽然技术上可以绕过但遵守它是基本的网络礼仪和合法性的基础。法律法规切勿爬取涉及个人隐私、商业秘密、受版权保护或国家法律明令禁止的数据。爬取的数据仅用于个人学习、研究或公益目的不得用于商业牟利或损害他人利益。控制访问频率疯狂、高频率地请求一个网站会对对方服务器造成压力即“DDOS攻击”这不仅是非法的也极易导致你的IP被永久封禁。7.2 让你的爬虫更“友好”设置请求头Headers我们已经做了。除了User-Agent有时还需要Referer来源页、Cookie登录状态等。添加延迟Delay在循环请求多个页面时在每次请求之间使用time.sleep()函数暂停几秒。这能极大降低对目标网站的压力。import time time.sleep(2) # 暂停2秒处理异常网络是不稳定的请求可能超时或失败。使用try...except语句包裹你的请求代码确保程序在遇到单个页面失败时不会崩溃并能记录错误继续运行。try: response requests.get(url, headersheaders, timeout5) response.raise_for_status() # 如果状态码不是200抛出异常 except requests.exceptions.RequestException as e: print(f请求 {url} 时出错{e}) continue # 跳过当前页面继续下一个7.3 代码组织与扩展函数化将发送请求、解析页面、保存数据分别写成函数使代码更清晰、更易复用。分页爬取分析URL规律用for循环构造所有页面的URL列表然后遍历爬取。存储多样化除了CSV可以尝试保存到JSON文件json模块、SQLite数据库sqlite3模块或MySQL等。使用Session如果需要保持登录状态或Cookie使用requests.Session()对象它会在多次请求间自动维持会话。7.4 下一步学什么当你熟练掌握了requestsBeautifulSoup这套组合拳后可以根据兴趣和需求深入学习动态网页爬取学习Selenium或Playwright它们可以控制真实浏览器解决JavaScript渲染问题。大规模爬虫框架学习Scrapy它是一个专业的爬虫框架提供了项目结构、异步处理、中间件、管道等强大功能适合复杂、大型的爬取任务。反爬虫与反反爬研究IP代理池、验证码识别、请求签名等更高级的对抗技术务必在合法合规的前提下进行。数据清洗与分析爬下来的数据往往是“脏”的学习使用pandas库进行数据清洗、分析和可视化。8. 总结与后续学习方向通过这个不到100行的脚本你已经掌握了Python爬虫最核心的骨架。我们来回顾一下你究竟学会了什么建立了核心思维模型爬虫 模拟浏览器请求 从HTML中按规律提取数据 保存。你不再觉得它神秘。掌握了最小可行技术栈会用requests库获取网页会用BeautifulSoup库解析HTML标签会用csv模块保存数据。这三者足以应对大量静态网站。完成了完整工作流从环境搭建、观察网页、编写代码、发送请求、解析数据到保存文件你独立走通了一个真实项目的全流程。具备了基础排错能力你知道了状态码403、404意味着什么知道了乱码如何解决知道了数据抓不到该如何排查。这“2小时”的投入带给你的不是一堆孤立的知识点而是一个可以立即上手、并能够自我扩展的实用技能。你可以尝试用同样的思路去爬取其他结构类似的网站比如豆瓣读书榜单、知乎热榜、天气预报网站等。记住爬虫技术是工具关键在于你用他来做什么。始终保持对数据的敬畏对规则的遵守将技术用于提升效率、辅助学习这才是长久之道。建议你将这个项目的代码保存好作为你爬虫学习的起点。下次当你需要从网上批量获取信息时你知道该从哪里开始了。
返回列表