Python爬虫实战入门:手把手教你抓取豆瓣电影TOP250

一、环境准备(5分钟搞定)

工欲善其事必先利其器!咱们先用conda创建专属环境:

conda create -n spider_env python=3.8
conda activate spider_env
pip install requests beautifulsoup4 pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

(小贴士)新手常见坑:

  1. 网络问题导致安装失败 → 切换清华镜像源
  2. 包版本冲突 → 使用虚拟环境
  3. 忘记激活环境 → 注意命令行前的(spider_env)

二、第一个爬虫实战(超简单版)

2.1 基础版代码

import requests
from bs4 import BeautifulSoup

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)
soup = BeautifulSoup(response.text, 'html.parser')

movies = []
for item in soup.select('.item'):
    title = item.select_one('.title').text
    rating = item.select_one('.rating_num').text
    movies.append({'电影名称': title, '评分': rating})

print(movies[:5])  # 打印前五部电影

2.2 代码解剖(新人必看)

  1. User-Agent伪装:让服务器以为你是浏览器访问(重要的事情说三遍)
  2. CSS选择器:比XPath更直观的定位方式
  3. select_one():精准定位单个元素
  4. 列表推导式:Pythonic的优雅写法

(避坑指南)新手常见报错:

  • 403 Forbidden → 检查headers是否完整
  • NoneType错误 → 确认CSS选择器是否正确
  • 编码问题 → 添加response.encoding=‘utf-8’

三、突破反爬机制(实战精华)

3.1 伪装大法

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Referer': 'https://www.douban.com/',
    'Cookie': '你的实际cookie'  # 用浏览器登录后获取
}

3.2 请求频率控制

import random
import time

for page in range(0, 250, 25):
    url = f'https://movie.douban.com/top250?start={page}'
    time.sleep(random.uniform(1, 3))  # 随机等待1-3秒
    # 发送请求代码...

3.3 代理IP使用

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
response = requests.get(url, headers=headers, proxies=proxies)

(重要提示)免费代理陷阱:

  1. 可用率不足30%
  2. 响应速度慢
  3. 存在安全隐患
    建议新手使用付费代理服务(如快代理、站大爷)

四、数据存储(多种姿势)

4.1 CSV存储

import pandas as pd
df = pd.DataFrame(movies)
df.to_csv('douban_top250.csv', index=False, encoding='utf_8_sig')

4.2 MySQL存储

import pymysql

conn = pymysql.connect(host='localhost', user='root', password='123456', db='spider')
cursor = conn.cursor()

sql = '''CREATE TABLE IF NOT EXISTS movies(
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100),
    rating FLOAT)
'''
cursor.execute(sql)

for movie in movies:
    cursor.execute("INSERT INTO movies(title, rating) VALUES (%s, %s)", 
                  (movie['电影名称'], movie['评分']))
conn.commit()

五、进阶技巧(高手必备)

5.1 异步爬虫

import aiohttp
import asyncio

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, url)
        # 解析代码...

asyncio.run(main())

5.2 Selenium动态渲染

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')  # 无界面模式
driver = webdriver.Chrome(options=options)
driver.get(url)
page_source = driver.page_source

六、法律与伦理(超级重要!!!)

  1. 遵守robots.txt协议(豆瓣的robots.txt明确禁止爬取)
  2. 控制请求频率(别把人家服务器搞崩了)
  3. 不爬取敏感数据(用户隐私、付费内容等)
  4. 用于学习研究目的(商业用途需要授权)

(血泪教训)真实案例警示:

  • 某大学生因爬取学校系统数据被处分
  • 某公司爬取竞争对手数据被起诉
  • 某爬虫程序导致目标网站瘫痪被索赔

七、下一步学习路线

  1. Scrapy框架 → 构建工程化爬虫
  2. 验证码识别 → 突破登录限制
  3. 分布式爬虫 → 提升采集效率
  4. 反反爬策略 → 指纹伪装、行为模拟

(学习资源推荐)

  • 官方文档(Requests/Scrapy)
  • 《Python网络数据采集》
  • Scrapy中文文档(https://scrapy-chs.readthedocs.io)

最后送大家一句话:爬虫虽好,可不要贪杯哦!技术是把双刃剑,用对了能开山劈石,用错了…(你懂的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值