Python爬虫入门避坑指南:三天从零到爬取豆瓣TOP250

liuzw 1 0

本文信息核实于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后,我们要从中提取电影名、评分、链接。这里我强烈推荐用BeautifulSouppip 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打开不乱码,方便你后续分析。


实用建议:让爬虫之路走得更顺

  1. 先定目标,再学技术。别漫无目的地学,比如“爬豆瓣TOP250”“爬知乎热榜”“爬天气数据”——带着目标去写代码,效率翻倍。我当年就是为了追星,爬偶像的微博数据,才学会的爬虫。

  2. 学会看Robots协议。在网站域名后加/robots.txt,比如https://movie.douban.com/robots.txt,能看到哪些路径允许爬。这不是法律强制,但算是行业道德,别去碰人家明确禁止的。

  3. 写代码要养成“礼貌”习惯。加延时、控制频率、设置超时(timeout=10),这些不是浪费时间,是保命符。你见过哪个爬虫大佬不写time.sleep的?

  4. 善用错误处理。写个try...except包裹请求,遇到报错就跳过,别让整个程序崩掉。初学者最容易忽略这点,但实战中网站随时可能改版。

  5. 数据清洗别忽略。爬下来的是“脏数据”,有空格、有缺失,用pandaspip install pandas)处理一下,你会感谢我的。


最后说句掏心窝的话:爬虫入门真的不难,难的是你总想一步登天。今天这篇文章,你跟着敲一遍代码,最多两小时就能跑通。别收藏了吃灰,现在就打开电脑,爬下你的第一个榜单。等你能爬豆瓣了,再去爬招聘网站、电商价格,你会发现——原来互联网上的数据,真的可以为你所用。但记住:爬虫是工具,别用它做违法的事,尤其是涉及个人隐私和版权的内容,碰都不要碰。 好了,去试试吧,有问题评论区见。

抱歉,评论功能暂时关闭!