Python爬虫入门:从零开始抓取网页数据
本文将介绍Python爬虫的核心概念和实现方法,通过一个完整的项目案例(抓取豆瓣电影Top250数据),带你掌握爬虫开发的核心技能。
一、爬虫的核心价值
数据采集:获取公开网页信息(商品价格、新闻、影评等)
自动化处理:定期监控网站内容变化
数据分析基础:为数据科学提供原始材料
行业应用:搜索引擎索引、价格监控、舆情分析
⚠️ 重要原则:遵守robots.txt协议,限制请求频率(>1秒/次),不抓取敏感数据
二、准备工作
安装必备库:
bash
pip install requests beautifulsoup4 pandas
三、完整爬虫项目:豆瓣电影Top250
python
import requests from bs4 import BeautifulSoup import pandas as pd import time import randomdef scrape_douban_top250():# 配置请求头和参数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','Accept-Language': 'zh-CN,zh;q=0.9'}base_url = "https://movie.douban.com/top250?start={}"movies = []# 遍历10页数据for page in range(0, 250, 25):url = base_url.format(page)try:response = requests.get(url, headers=headers, timeout=10)response.raise_for_status() # 检查HTTP错误soup = BeautifulSoup(response.text, 'html.parser')# 解析电影条目items = soup.select('.item')for item in items:title = item.select_one('.title').text.strip()rating = item.select_one('.rating_num').text.strip()info = item.select_one('.bd p').text.strip().split('\n')[0]quote_tag = item.select_one('.quote')quote = quote_tag.text.strip() if quote_tag else "无"movies.append({'排名': len(movies) + 1,'标题': title,'评分': rating,'信息': info,'经典台词': quote})# 随机延迟防止被封IPtime.sleep(random.uniform(1.0, 2.5))print(f"已抓取第{page//25 + 1}页数据")except Exception as e:print(f"第{page//25 + 1}页抓取出错: {str(e)}")# 保存数据到CSVdf = pd.DataFrame(movies)df.to_csv('douban_top250.csv', index=False, encoding='utf_8_sig')print("数据已保存到 douban_top250.csv")return df# 执行爬虫 if __name__ == "__main__":movie_data = scrape_douban_top250()print(f"成功抓取{len(movie_data)}部电影数据")print(movie_data.head(3)) # 预览前3条数据
四、技术要点解析
请求伪装
User-Agent
模拟浏览器访问随机延迟避免触发反爬机制
精准数据提取
python
# CSS选择器定位元素 item.select_one('.title').text.strip()
错误处理
python
try:response.raise_for_status() except Exception as e:print(f"出错: {str(e)}")
数据存储
使用Pandas保存结构化数据
CSV文件保证数据通用性
五、进阶技巧
动态页面处理:使用Selenium处理JavaScript渲染
API逆向工程:直接调用网站数据接口
分布式爬虫:Scrapy-Redis架构实现
验证码破解:OCR识别或第三方打码平台
六、法律与道德边界
✅ 允许:公开数据、无访问限制内容
❌ 禁止:
绕过付费墙抓取内容
抓取用户隐私数据
对网站造成流量压力(每秒请求>3次)
违反网站robots.txt规定
提示:商业级爬虫需考虑IP代理池、验证码识别、User-Agent轮换等高级技术
七、运行结果示例
text
排名 | 标题 | 评分 | 信息 | 经典台词 ------------------------------------------------------------------- 1 | 肖申克的救赎 | 9.7 | 导演: 弗兰克·德拉邦特... | 希望让人自由 2 | 霸王别姬 | 9.6 | 导演: 陈凯歌... | 不疯魔不成活 3 | 阿甘正传 | 9.5 | 导演: 罗伯特·泽米吉斯... | 生活就像一盒巧克力...
通过这个项目,你可以掌握爬虫开发全流程。实际应用中请根据目标网站结构调整解析逻辑,并始终遵循合法合规原则。