本文信息核实于2026-08-06
先给你交个底:我见过太多人学爬虫,第一周就放弃了。不是因为他们笨,而是因为90%的教程上来就让你装Scrapy、用Selenium,结果环境配置就劝退了三天。今天我不讲那些花架子,直接告诉你:用Python标准库加requests,你完全可以在一个下午写出第一个能跑通的小爬虫。而且,我保证你今天看完这篇文章,晚上就能爬下豆瓣电影TOP250的榜单——前提是你电脑上装了Python3.8以上版本,没有的话先去官网下载,别用3.6以下的,很多库都不兼容了。
核心观点:爬虫的本质就是“模拟浏览器发请求”
很多人把爬虫想得太玄乎,什么“黑客技术”“数据挖掘”,其实说白了就是三件事:找URL、发请求、解析响应。你平时用浏览器看网页,本质也是发请求然后渲染HTML,爬虫只是把这过程自动化了。理解了这点,你就成功了一半。
第一步:先别急着写代码,用浏览器开发者工具“偷看”网页结构
打开豆瓣TOP250页面(movie.douban.com/top250),按F12,切到Network(网络)标签,刷新页面。你会看到一堆请求,但别慌,我们只需要看第一个——通常是top250这个文档请求。点开它,在Headers里能看到请求URL、请求方法(GET)、User-Agent等。这里有个关键点:很多网站会检查User-Agent(就是告诉服务器“我是哪个浏览器”),如果你不伪装,直接拒绝访问。所以代码里一定要带上:
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'
}
这串代码不用背,直接从浏览器里复制就行。
第二步:用requests发请求,拿到HTML源码
安装requests库(pip install requests),然后写三行代码:
import requests
resp = requests.get('https://movie.douban.com/top250', headers=headers)
print(resp.text[:500]) # 打印前500个字符看看
如果你看到一堆HTML标签,恭喜你,请求成功了。如果看到403 Forbidden,说明你被反爬了,检查一下User-Agent是否完整,或者加个time.sleep(1)延迟一下。
第三步:用正则或BeautifulSoup解析数据
拿到HTML后,我们要从中提取电影名、评分、链接。这里我强烈推荐用BeautifulSoup(pip install beautifulsoup4),比正则简单十倍:
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, 'html.parser')
movies = soup.select('.grid_view .item') # 找到所有电影条目
for movie in movies:
title = movie.select_one('.title').text
rating = movie.select_one('.rating_num').text
print(f'{title} - {rating}')
就这么简单。跑一下,你的屏幕上就会滚动出一堆电影名和分数。看到没?爬虫入门真的不难。
第四步:翻页——学会循环处理
TOP250有10页,每页25条。你观察一下URL变化:?start=0、?start=25、?start=50……于是我们只需要循环改变start参数:
for i in range(10):
url = f'https://movie.douban.com/top250?start={i*25}'
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, 'html.parser')
# 解析并保存数据...
time.sleep(0.5) # 礼貌爬取,别把服务器搞挂了
注意那个time.sleep(0.5),这不是废话——你请求太快会被封IP,到时候哭都来不及。
5个新手最常踩的坑(FAQ)
Q1:为什么我按教程写的代码,运行报错ModuleNotFoundError?
A:你肯定没安装对应的库。在命令行(或终端)里执行pip install requests beautifulsoup4,如果是Mac/Linux用户,记得用pip3。别偷懒,这个错90%都是环境问题。
Q2:爬下来的数据是乱码,怎么办?
A:大概率是编码问题。在requests.get()里加一个参数:resp.encoding = 'utf-8',或者直接resp = requests.get(url, headers=headers)然后resp.encoding = resp.apparent_encoding。这个方法能自动检测编码,省心。
Q3:网站反爬太强,一请求就403,怎么破?
A:先加User-Agent,还不行就加Referer(表示从哪个页面跳转过来)和Cookie(浏览器里的登录信息)。实在不行,用requests.Session()保持会话,模拟一个真实用户的行为。记住一个原则:你的请求越像真人,越不容易被拦。
Q4:我需要学Scrapy吗? A:新手阶段完全不用。Scrapy是框架,适合大规模爬取,但你连基础都没打牢,直接上框架只会让你怀疑人生。先把requests+BeautifulSoup玩熟,再考虑进阶。
Q5:爬下来的数据怎么保存? A:最懒的方法是存成CSV:
import csv
with open('movies.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['电影名', '评分'])
# 把数据一行行写进去
Excel打开不乱码,方便你后续分析。
实用建议:让爬虫之路走得更顺
-
先定目标,再学技术。别漫无目的地学,比如“爬豆瓣TOP250”“爬知乎热榜”“爬天气数据”——带着目标去写代码,效率翻倍。我当年就是为了追星,爬偶像的微博数据,才学会的爬虫。
-
学会看Robots协议。在网站域名后加
/robots.txt,比如https://movie.douban.com/robots.txt,能看到哪些路径允许爬。这不是法律强制,但算是行业道德,别去碰人家明确禁止的。 -
写代码要养成“礼貌”习惯。加延时、控制频率、设置超时(
timeout=10),这些不是浪费时间,是保命符。你见过哪个爬虫大佬不写time.sleep的? -
善用错误处理。写个
try...except包裹请求,遇到报错就跳过,别让整个程序崩掉。初学者最容易忽略这点,但实战中网站随时可能改版。 -
数据清洗别忽略。爬下来的是“脏数据”,有空格、有缺失,用
pandas(pip install pandas)处理一下,你会感谢我的。
最后说句掏心窝的话:爬虫入门真的不难,难的是你总想一步登天。今天这篇文章,你跟着敲一遍代码,最多两小时就能跑通。别收藏了吃灰,现在就打开电脑,爬下你的第一个榜单。等你能爬豆瓣了,再去爬招聘网站、电商价格,你会发现——原来互联网上的数据,真的可以为你所用。但记住:爬虫是工具,别用它做违法的事,尤其是涉及个人隐私和版权的内容,碰都不要碰。 好了,去试试吧,有问题评论区见。