Python爬虫新手避坑指南:从零开始抓取网页数据(纯干货)

一、准备工作:你的第一把"铲子"

(重要!)工欲善其事必先利其器,咱们先准备好这些工具:

  1. Python 3.8+(推荐最新版)
  2. requests库(HTTP请求神器)
  3. BeautifulSoup4(HTML解析专家)
  4. Chrome浏览器(开发者工具必备)

安装命令来咯:

pip install requests beautifulsoup4

新手常见坑点预警!!!

  • 有些网站会检测Python的User-Agent(用户代理)
  • 注意requests.get()的timeout参数设置
  • 记得检查HTTP状态码(200才正常)

二、第一个爬虫:抓取豆瓣电影Top250

咱们先用豆瓣的公开接口练手(注意:实际开发前请查看网站robots.txt)

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')

# 提取电影标题
for item in soup.select('.item'):
    title = item.select_one('.title').text
    rating = item.select_one('.rating_num').text
    print(f"电影:{title} | 评分:{rating}")

运行结果示例:

电影:肖申克的救赎 | 评分:9.7
电影:霸王别姬 | 评分:9.6
...

三、进阶技巧:突破常见反爬机制

1. 随机User-Agent生成(防封必备)

from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}

2. IP代理设置(突破访问限制)

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

3. 请求间隔设置(避免被封)

import time
import random

time.sleep(random.uniform(1, 3))  # 随机等待1-3秒

四、数据存储:把挖到的"金子"存好

1. CSV存储(简单易用)

import csv

with open('movies.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['标题', '评分'])
    # 循环写入数据...

2. MySQL存储(适合大数据量)

import pymysql

conn = pymysql.connect(host='localhost', user='root', password='123456', db='spider')
cursor = conn.cursor()
sql = 'INSERT INTO movies(title, rating) VALUES(%s, %s)'
cursor.execute(sql, (title, rating))
conn.commit()

五、法律红线:这些坑千万别踩!!!

  1. 绝对不要爬取敏感数据(用户隐私、国家机密)
  2. 遵守网站的robots.txt协议
  3. 控制访问频率(别把人家服务器搞崩了)
  4. 商业用途需获得授权
  5. 注意《网络安全法》相关规定

六、实战演练:天气预报数据抓取

来个小练习巩固下(以中国天气网为例):

url = 'http://www.weather.com.cn/weather/101020100.shtml'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')

# 解析未来7天天气
for item in soup.select('.t li'):
    date = item.select_one('h1').text
    weather = item.select_one('.wea').text
    temp = item.select_one('.tem').text.strip()
    print(f"{date}: {weather} {temp}")

输出示例:

08日(今天): 多云转晴 29/24℃
09日(明天): 晴 31/25℃
...

七、常见错误排查指南

1. 返回403错误怎么办?

  • 检查User-Agent是否设置
  • 添加Referer请求头
  • 尝试使用代理IP

2. 页面内容获取不全?

  • 可能是动态加载的数据(需要Selenium)
  • 检查XPath/CSS选择器是否正确
  • 查看网页源码确认元素结构

3. 遇到验证码怎么办?

  • 降低请求频率
  • 使用打码平台(商业项目)
  • 改用API接口获取数据

最后说句掏心窝的话:爬虫虽好,可不要贪杯哦!建议新手先从公开API入手(比如豆瓣开放API、高德地图API),等熟悉规则后再挑战更复杂的网站。记住,技术是把双刃剑,咱们要用它来创造价值而不是搞破坏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值