Python爬虫入门:5步批量获取你需要的数据
网上有太多有价值的数据——商品价格、行业报告、新闻资讯、招聘信息……手动复制粘贴?太慢了。Python爬虫就是帮你批量、自动地从网页上抓取数据的工具。
别被"爬虫"这个词吓到,其实入门比你想象的简单。今天用5个步骤,带你从零开始写出第一个爬虫脚本。
第一步:搞清楚你要抓什么
写爬虫之前,先回答两个问题:
-
- 目标网页:你要从哪个网站抓数据?(比如豆瓣电影、京东商品、天气网站)
-
- 目标数据:你要抓网页上的什么内容?(比如电影评分、商品价格、气温)
-
举个例子:你想抓豆瓣Top250电影的名称、评分、一句话评论,目标URL就是 https://movie.douban.com/top250。
小技巧:在浏览器里按F12打开开发者工具,找到你要的数据在HTML中的位置,记下标签和属性。
第二步:装好Python和两个库
你需要Python 3.x环境,然后安装两个核心库:
| 库 | 用途 | 安装命令 |
| requests | 发送HTTP请求,获取网页内容 | pip install requests |
| BeautifulSoup | 解析HTML,提取目标数据 | pip install bs4 |
这俩就够了,入门阶段不需要更复杂的框架。
第三步:请求网页,拿到HTML
用requests库发送请求,获取网页的HTML源码:
import requests
url = "https://movie.douban.com/top250"
headers = {"User-Agent": "Mozilla/5.0"} # 模拟浏览器访问
response = requests.get(url, headers=headers)
html = response.text # 这就是网页的HTML源码
print(html[:500]) # 先看看前500个字符
为什么要加headers? 很多网站会检测访问者是不是浏览器,不加User-Agent可能被拒绝访问。加上就伪装成正常浏览器了。
第四步:解析HTML,提取数据
拿到HTML后,用BeautifulSoup解析,按标签和属性提取你要的数据:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
# 找到所有电影条目
movies = soup.find_all("div", class_="item")
for movie in movies:
name = movie.find("span", class_="title").text # 电影名
rating = movie.find("span", class_="rating_num").text # 评分
quote = movie.find("span", class_="inq").text # 一句话评论
print(f"{name} | 评分:{rating} | {quote}")
这段代码会输出类似:
肖申克的救赎 | 评分:9.7 | 希望让人自由
霸王别姬 | 评分:9.6 | 风华绝代
...
核心逻辑很简单:find_all找到所有同类标签,find定位单个标签,.text提取文本内容。
第五步:保存数据,批量使用
抓到的数据要保存下来才有用。最简单的方式是存CSV:
import csv
with open("movies.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["电影名", "评分", "评论"]) # 写表头
for movie in movies:
name = movie.find("span", class_="title").text
rating = movie.find("span", class_="rating_num").text
quote = movie.find("span", class_="inq").text
writer.writerow([name, rating, quote])
打开movies.csv,你会看到一个整齐的表格:250部电影,每行一条数据,随时能用Excel打开分析。
如果你需要更专业的存储,可以用pandas存DataFrame、或存到数据库(SQLite/MySQL),原理一样。
进阶技巧:翻页爬取和反爬应对
上面的例子只抓了第一页(25条数据)。要抓全部250条,需要翻页:
for start in range(0, 250, 25): # 0,25,50,...,225
url = f"https://movie.douban.com/top250?start={start}"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
# 同样的解析逻辑...
time.sleep(1) # 每页间隔1秒,别太猛
常见反爬手段及应对:
| 反爬手段 | 应对方法 |
| User-Agent检测 | headers里加浏览器UA |
| 频率限制 | time.sleep()控制请求间隔 |
| 验证码 | 降低请求频率或使用OCR识别 |
| IP封禁 | 使用代理IP池轮换 |
| 动态渲染页面 | 用Selenium模拟浏览器操作 |
合规提醒:爬虫有边界
爬虫很强大,但有法律和道德边界:
-
- 只抓公开数据,不登录后抓私有内容
-
- 遵守网站的robots.txt规则
-
- 不高频请求导致对方服务器压力过大
-
- 抓到的数据不用于商业转售(除非获得授权)
-
- 涉及个人信息的数据,要遵守《个人信息保护法》
-
做个有原则的爬虫开发者,工具是好的,用法决定一切。
总结:5步上手Python爬虫
回顾一下今天的路线:
| 步骤 | 动作 |
| 1 | 确定目标网页和数据 |
| 2 | 装Python + requests + bs4 |
| 3 | requests.get()获取HTML |
| 4 | BeautifulSoup解析提取数据 |
| 5 | csv/pandas保存数据 |
不到20行代码,你就能批量获取网页数据。这不是黑科技,这是普通人也能掌握的效率工具。
如果你想进一步学习爬虫,或者需要自动化获取某些数据,欢迎扫码交流。
扫码添加秦杰,探讨AI智能体落地应用
