author: 专注Python实战,分享爬虫与数据分析干货
title: Python爬虫实战①|3行代码抓取网页数据,新手也能秒上手
update: 2026-04-25
tags: Python,爬虫,新手入门,requests,BeautifulSoup,数据抓取

作者:专注Python实战,分享爬虫与数据分析干货
更新时间:2026年4月
适合人群:零基础小白、想学爬虫但不知从何入手的职场人


前言:为什么说爬虫是Python最实用的技能?

你有没有遇到过这些崩溃瞬间——

  • 领导扔来一个链接:把这个网站所有竞品的价格整理成表格
  • 每天要手动复制几十个数据,更新到Excel里,一干就是2小时
  • 想分析某个行业趋势,但找不到现成的数据,只能干瞪眼

网页爬虫 = 自动帮你从网上把数据抓下来。 不会爬虫,你只能手动复制粘贴;会爬虫,10行代码,睡一觉醒来,数据乖乖躺在Excel里等你。

很多人觉得爬虫很难,其实Python爬虫的入门,比你想象的简单太多。

今天这一篇,专栏第1篇(免费引流),带你用3行代码完成第一次网页抓取。


一、环境准备(只需做一次)

1.1 安装Python

打开浏览器,访问 https://www.python.org/downloads/ ,下载最新版的Python 3.10或3.11。

安装时一定要勾选 Add Python to PATH,这个选项默认不勾,不勾的话后面命令行会找不到Python。

安装完成后,按 Win + R,输入 cmd,回车,打开命令行窗口。输入:

python --version

看到 Python 3.x.x 的版本号,说明安装成功了。

1.2 安装核心库

在命令行里执行:

pip install requests beautifulsoup4 openpyxl pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
库名 作用
requests 发送网络请求,像浏览器一样访问网页
beautifulsoup4 解析HTML,从网页里提取你需要的数据
openpyxl 把数据写入Excel文件
pandas 数据分析处理(后面章节用到)

二、用3行代码抓取第一个网页

2.1 抓取任意网页的标题

import requests
from bs4 import BeautifulSoup

# 第1行:请求网页
response = requests.get("https://www.baidu.com")

# 第2行:设置编码(解决中文乱码)
response.encoding = "utf-8"

# 第3行:解析网页,提取标题
soup = BeautifulSoup(response.text, "html.parser")
print("网页标题:", soup.title.string)

运行效果:

网页标题: 百度一下,你就知道

代码解释:

  • requests.get(url) 就像在浏览器地址栏输入网址并回车,返回网页完整内容
  • BeautifulSoup(response.text, "html.parser") 把网页解析成树形结构,方便按规则提取数据
  • soup.title.string 提取网页的 <title> 标签内容

2.2 抓取网页所有链接

import requests
from bs4 import BeautifulSoup

response = requests.get("https://www.baidu.com", timeout=10)
response.encoding = "utf-8"
soup = BeautifulSoup(response.text, "html.parser")

print("=" * 50)
print("百度首页所有链接:")
print("=" * 50)

for i, link in enumerate(soup.find_all("a"), 1):
    href = link.get("href", "")
    text = link.text.strip() or "[无文字]"
    if href:
        print(f"{i:>3}. {text:<15} -> {href}")

运行效果(部分):

==================================================
百度首页所有链接:
==================================================
  1. 新闻            -> http://news.baidu.com
  2. hao123          -> https://www.hao123.com
  3. 地图            -> http://map.baidu.com
  4. 视频            -> https://v.baidu.com
  5. 贴吧            -> https://tieba.baidu.com
  6. 学术            -> https://xueshu.baidu.com
 ...

2.3 实战:抓取豆瓣电影Top250

我们来抓一个真实数据——豆瓣电影排行榜:

import requests
from bs4 import BeautifulSoup
import openpyxl
from openpyxl.styles import Font, Alignment, PatternFill
import os

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"
}

url = "https://movie.douban.com/top250"
response = requests.get(url, headers=headers, timeout=15)
response.encoding = "utf-8"
soup = BeautifulSoup(response.text, "html.parser")
movies = soup.find_all("div", class_="item")

print(f"共找到 {len(movies)} 部电影")
print("=" * 55)
print("排名  |  电影名称       | 评分  |  评价语")
print("-" * 55)

for movie in movies:
    rank = movie.find("em").text
    title = movie.find("span", class_="title").text
    rating = movie.find("span", class_="rating_num").text
    quote_tag = movie.find("span", class_="inq")
    quote = quote_tag.text if quote_tag else ""
    print(f" {rank:>2}  | {title:<14} | {rating} | {quote}")

运行效果:

共找到 25 部电影
=======================================================
排名  |  电影名称       | 评分  |  评价语
-------------------------------------------------------
  1  | 肖申克的救赎      | 9.7  | 希望让人自由。
  2  | 霸王别姬          | 9.6  | 风华绝代。
  3  | 阿甘正传          | 9.5  | 一部美国人的寓言。
  4  | 泰坦尼克号        | 9.5  | 失去的仅仅是艾蜜莉。
  5  | 千与千寻          | 9.4  | 最好的宫崎骏,最好的久石让。
  6  | 星际穿越          | 9.4  | 爱是唯一可以超越时间与空间的事物。
  7  | 这个杀手不太冷      | 9.4  | 小萝莉和怪蜀黍纯情飙泪。
...

2.4 保存到Excel

数据抓到了,存到Excel里,方便后续分析:

import requests
from bs4 import BeautifulSoup
import openpyxl
from openpyxl.styles import Font, Alignment, PatternFill
import os

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}

response = requests.get("https://movie.douban.com/top250", headers=headers, timeout=15)
response.encoding = "utf-8"
soup = BeautifulSoup(response.text, "html.parser")
movies = soup.find_all("div", class_="item")

wb = openpyxl.Workbook()
ws = wb.active
ws.title = "豆瓣电影Top250"

ws.append(["排名", "电影名称", "评分", "评价语", "链接"])

header_font = Font(bold=True, size=12, color="FFFFFF")
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
for cell in ws[1]:
    cell.font = header_font
    cell.fill = header_fill
    cell.alignment = Alignment(horizontal="center")

for movie in movies:
    rank = movie.find("em").text
    title = movie.find("span", class_="title").text
    rating = movie.find("span", class_="rating_num").text
    quote_tag = movie.find("span", class_="inq")
    quote = quote_tag.text if quote_tag else ""
    link_tag = movie.find("a")
    link = link_tag.get("href", "") if link_tag else ""
    ws.append([rank, title, rating, quote, link])

ws.column_dimensions["A"].width = 6
ws.column_dimensions["B"].width = 20
ws.column_dimensions["C"].width = 8
ws.column_dimensions["D"].width = 30
ws.column_dimensions["E"].width = 35

filename = "豆瓣电影Top250.xlsx"
wb.save(filename)
print(f"成功保存 {len(movies)} 部电影到 {filename}")
print(f"文件路径:{os.getcwd()}\{filename}")

三、必须掌握的请求头参数

3.1 什么是User-Agent?

每当你访问一个网站,浏览器都会发送一段信息告诉网站我是谁。这段信息叫 User-Agent。

如果不写这个参数,很多网站会直接拒绝你的请求(返回403错误)。

3.2 常用请求头参数

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",
    "Referer": "https://www.google.com/",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
}

3.3 requests更多参数

# 设置超时,防止请求卡死
response = requests.get(url, headers=headers, timeout=10)

# POST请求(提交表单)
response = requests.post(url, data={"username": "zhangsan", "password": "123456"})

# 带参数的请求
params = {"wd": "Python爬虫", "tn": "baidu"}
response = requests.get("https://www.baidu.com/s", params=params)

# 下载图片/文件
response = requests.get(image_url, headers=headers)
with open("image.jpg", "wb") as f:
    f.write(response.content)

四、常见错误与解决方案

错误信息 原因 解决方法
ModuleNotFoundError: No module named requests 没装库 执行 pip install requests beautifulsoup4
UnicodeEncodeError 命令行编码问题 Windows命令行改用 chcp 65001 或在IDE里运行
HTTP 403 Forbidden 被网站拒绝 加上 headers 请求头,模拟浏览器
ConnectionError 网络问题 检查网络,或者目标网站是否挂了
中文乱码 编码不对 试试 response.encoding = utf-8 或 gbk
timeout 请求超时 加大 timeout 参数的值

五、知识卡

概念 说明
requests.get(url) GET请求,访问网页获取内容
response.text 网页的完整HTML源代码(字符串)
response.status_code HTTP状态码,200=成功,404=不存在,403=被拒绝
response.encoding 网页编码,设置正确可避免中文乱码
BeautifulSoup HTML解析库,把网页内容解析成树形结构方便提取
soup.find() 找到第一个匹配的标签
soup.find_all() 找到所有匹配的标签,返回列表
soup.title.string 提取网页标题
tag.get(“href”) 获取标签的某个属性值
tag.text 获取标签内所有文字内容

六、课后作业

必做题:

  1. 把上面的豆瓣电影爬虫代码复制到Python里跑一遍
  2. 尝试把第1页的25条数据全部保存到Excel

选做题(有余力再挑战):

  1. 尝试抓取第2页豆瓣电影(提示:URL加参数 ?start=25)
  2. 抓取你感兴趣的任意网站(比如天气预报、新闻网站)的标题数据

完成作业的同学,把代码或Excel截图发到评论区!


3行代码 = 自动从网页抓数据。 看起来简单,背后覆盖了爬虫最核心的三个步骤:请求、解析、存储。

这篇文章只是入门,真正的爬虫世界远不止于此。后面我们会学到:

  • 如何抓取翻页数据(一页、十页、一百页)
  • 如何抓取需要登录才能看的内容
  • 如何抓取JavaScript动态渲染的页面
  • 如何应对各种反爬虫策略
  • 如何用 Pandas 做数据分析 + Matplotlib 画图表

本专栏完整大纲预告:

  • 第2篇:requests库详解——搞定90%的网页请求
  • 第3篇:BeautifulSoup4高级操作——精准提取任意数据
  • 第4篇:抓取翻页数据,一口气抓完所有页面
  • 第5篇:抓取动态网页——AJAX与API接口解析
  • 第6篇:反爬虫应对策略(IP代理+随机延迟+UA伪装)
  • 第7篇:XPath精准定位——复杂网页数据提取
  • 第8篇:Selenium模拟浏览器——JS渲染页面一把抓
  • 第9篇:Cookie与登录态——搞定需要登录的页面
  • 第10篇:数据存储方案——CSV/Excel/MySQL全搞定
  • ……完整30篇持续更新,涵盖爬虫+数据分析全流程

收藏 + 关注,专栏更新不迷路!

有问题欢迎评论区留言,大家一起讨论!


标签:Python | 爬虫 | 新手入门 | 零基础 | requests | BeautifulSoup | 数据抓取 | 豆瓣电影

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐