文章目录
想用Python轻松抓取网页数据?这篇实战教程带你30分钟上手!
(小声说)你可能不知道,现在网上90%的数据都能用Python爬虫轻松获取!无论是商品价格、新闻资讯还是电影评分,只要肉眼能看到的网页数据,Python爬虫都能帮你自动化采集。今天我们就用最简单的代码,手把手带你实现第一个爬虫项目!
🛠️ 环境准备(超简单!)
在开始前,你只需要:
- 安装Python 3.6+(推荐用最新版)
- 安装这两个库:
pip install requests # 网页请求神器
pip install beautifulsoup4 # HTML解析利器
(注意!)不要直接复制网站数据,先看完整个教程再动手!
🎯 实战目标:抓取豆瓣电影Top250
我们以经典案例【豆瓣电影Top250】作为目标,完整流程包含:
- 发送网页请求
- 解析HTML结构
- 提取关键数据
- 处理分页
- 保存结果
第一步:发送网页请求(核心代码仅3行!)
import requests
url = "https://movie.douban.com/top250"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
response = requests.get(url, headers=headers)
print(response.status_code) # 打印200表示成功!
(超级重要)一定要加headers模拟浏览器访问!很多网站会拦截没有User-Agent的请求!
第二步:解析HTML结构
用浏览器开发者工具(F12)找到数据的位置:
(伪示意图)
实际代码解析:
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
movies = soup.find_all('div', class_='item')
for movie in movies[:3]: # 先测试前3条数据
title = movie.find('span', class_='title').text
print(f"电影名称:{title}")
(个人心得)BeautifulSoup的find_all
和find
方法灵活搭配使用,就能搞定90%的解析需求!
第三步:完整数据提取
提取电影名称、评分、经典台词等信息:
for movie in movies:
# 中文标题(过滤外文标题)
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"{title} | 评分:{rating} | 台词:{quote}")
(避坑指南)遇到标签不存在的情况一定要用if else
处理,否则会报错!
第四步:处理分页(核心技巧!)
豆瓣电影分页规律分析:start=0
→ start=25
→ start=50
…
base_url = "https://movie.douban.com/top250?start={}"
for page in range(0, 250, 25):
url = base_url.format(page)
# 这里要重新发送请求并解析(建议封装成函数)
# 为防止被封IP,建议添加time.sleep(2)
(重要提醒)控制请求频率!建议每请求2页暂停1秒,否则可能被封禁IP!
第五步:保存数据
方案一:保存到CSV文件
import csv
with open('movies.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['名称', '评分', '台词'])
for movie in movies:
# ...(提取数据代码)
writer.writerow([title, rating, quote])
方案二:保存到MySQL数据库(进阶)
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', db='spider')
cursor = conn.cursor()
# 创建表(仅需执行一次)
cursor.execute('''CREATE TABLE movies
(title VARCHAR(100), rating FLOAT, quote TEXT)''')
# 插入数据
cursor.execute("INSERT INTO movies VALUES (%s, %s, %s)", (title, rating, quote))
conn.commit()
(数据库小白注意)记得先安装pymysql
库,并修改自己的数据库配置!
⚠️ 爬虫道德与注意事项
- 遵守网站的robots.txt协议
- 不要高频访问(建议设置3秒以上间隔)
- 不要抓取敏感数据或个人隐私
- 商用前务必获得网站授权
(血泪教训)我之前因为请求太快被封过IP,大家一定要控制手速!
🚀 下一步学习方向
- 动态网页抓取(Selenium/Playwright)
- 反爬策略突破(IP代理、验证码识别)
- 异步高性能爬虫(aiohttp)
- 爬虫框架(Scrapy)
(个人建议)新手先掌握基础再学框架,不要直接上Scrapy!
完整代码获取
关注公众号【Python学习站】,回复【豆瓣爬虫】获取完整可运行代码!(伪示例)
(其实自己动手敲一遍效果更好!遇到问题欢迎评论区提问~)
💡 爬虫就像开盲盒,永远不知道下一个数据会带来什么惊喜!快去试试吧!遇到问题评论区见~