Python 网络爬虫实战指南:从入门到进阶

一、前言:什么是网络爬虫?

网络爬虫(Web Crawler),又称网页蜘蛛,是一种自动化程序,用于模拟人类浏览器行为,从互联网上抓取网页数据。在大数据时代,获取数据是第一步,而爬虫技术正是打开网络信息宝库的钥匙。

Python 之所以成为爬虫领域的首选语言,是因为其简洁的语法和强大的第三方库(如 requestsBeautifulSouplxmlScrapyselenium 等)。


二、爬虫流程概览

一个基本的网络爬虫包含以下五个步骤:

  1. 发送请求(如 GET/POST)
  2. 获取网页源码(HTML)
  3. 解析网页结构,提取目标数据
  4. 存储数据(本地/数据库/Excel)
  5. 处理反爬机制(如 User-Agent、验证码、IP 限制等)

三、基础模块介绍与实战

1. requests:发送网络请求

安装方式:

复制代码
bash
复制编辑
pip install requests

示例代码:

ini 复制代码
python
复制编辑
import requests

url = "https://example.com"
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
print(response.text)
  • status_code 获取响应码
  • text 获取网页源码
  • json() 解析 JSON 数据接口

2. BeautifulSoup:网页解析神器

安装方式:

复制代码
bash
复制编辑
pip install beautifulsoup4

结合 requests 使用:

ini 复制代码
python
复制编辑
from bs4 import BeautifulSoup
import requests

url = "https://quotes.toscrape.com"
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")

quotes = soup.find_all("span", class_="text")
for quote in quotes:
    print(quote.text)

常用方法:

  • find() / find_all():根据标签或属性查找
  • select():支持 CSS 选择器
  • get("href"):提取链接地址

3. lxml:速度更快的解析器

css 复制代码
python
复制编辑
from lxml import etree

html = etree.HTML(response.text)
titles = html.xpath('//div[@class="title"]/text()')
  • 支持 XPath 语法,结构清晰,速度更快
  • 对于结构复杂的网站更加灵活

四、实战:爬取豆瓣电影 Top250

ini 复制代码
python
复制编辑
import requests
from bs4 import BeautifulSoup
import time

for page in range(0, 250, 25):
    url = f"https://movie.douban.com/top250?start={page}"
    headers = {"User-Agent": "Mozilla/5.0"}
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text, "html.parser")
    
    titles = soup.select(".title")
    for title in titles:
        print(title.text.strip())
    
    time.sleep(2)  # 避免过快请求触发反爬

你可以将数据保存到本地文件或 Excel:

ini 复制代码
python
复制编辑
import pandas as pd
df = pd.DataFrame(titles, columns=["电影名"])
df.to_excel("豆瓣Top250.xlsx", index=False)

五、动态内容与模拟登录

1. selenium:操作浏览器,爬取动态网站

安装:

复制代码
bash
复制编辑
pip install selenium

以模拟打开京东搜索为例:

vbnet 复制代码
python
复制编辑
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
driver.get("https://www.jd.com")

search = driver.find_element(By.ID, "key")
search.send_keys("手机")
search.submit()

time.sleep(3)
html = driver.page_source
driver.quit()

适用于:

  • JS 加载数据的网站
  • 模拟登录、点击、下拉
  • 处理验证码登录配合图像识别

六、应对反爬机制

爬虫一旦频繁访问网站,就可能遭遇以下限制:

  • User-Agent 检查:设置请求头伪装为浏览器
  • IP 限制:更换代理 IP
  • Cookie 登录验证:使用 Session 持久化
  • 验证码阻挡:使用打码平台或人工识别

示例(使用 session):

ini 复制代码
python
复制编辑
session = requests.Session()
login_data = {"username": "abc", "password": "123"}
session.post("https://example.com/login", data=login_data)
res = session.get("https://example.com/userinfo")

七、进阶:使用 Scrapy 框架构建项目级爬虫

安装:

复制代码
bash
复制编辑
pip install scrapy

创建爬虫项目:

bash 复制代码
bash
复制编辑
scrapy startproject myspider
cd myspider
scrapy genspider douban "movie.douban.com"

编写 douban.py

css 复制代码
python
复制编辑
import scrapy

class DoubanSpider(scrapy.Spider):
    name = "douban"
    start_urls = ["https://movie.douban.com/top250"]

    def parse(self, response):
        for movie in response.css("div.item"):
            yield {
                "标题": movie.css("span.title::text").get(),
                "评分": movie.css("span.rating_num::text").get(),
            }
        next_page = response.css("span.next a::attr(href)").get()
        if next_page:
            yield response.follow(next_page, self.parse)

运行爬虫:

复制代码
bash
复制编辑
scrapy crawl douban -o top250.json

Scrapy 的优势:

  • 异步高效
  • 数据管道支持(导出 CSV/数据库)
  • 强大的中间件和反爬机制处理

八、数据保存方式对比

存储方式 场景
Excel/CSV 简单保存分析、报表生成 pandas
数据库 结构化大量数据管理 MySQL、SQLite
JSON 文件 Web API、前端数据通信 json
MongoDB 非结构化、灵活扩展 pymongo

九、案例拓展:热门网站数据采集

  1. 知乎回答数据

    • 登录保护复杂
    • 推荐使用 selenium+cookie 模拟登录
  2. 微博热搜列表

    • 动态内容,用 selenium 获取完整渲染内容
  3. 招聘网站(如拉勾网、Boss)

    • 反爬严格,推荐使用代理池与模拟登录

十、总结与建议

学习爬虫不仅是提升编程能力的重要一步,也为数据分析、机器学习、商业情报等领域打下坚实基础。建议从静态页面抓取起步,逐步掌握动态内容处理、验证码应对、框架搭建与数据存储等技能。

学习路径建议:

  1. 掌握 requests、BeautifulSoup 的基本用法
  2. 学会使用 selenium、cookie 模拟登录
  3. 构建小型项目(如爬取书籍、招聘信息)
  4. 学习 Scrapy 框架,提高开发效率
  5. 结合数据库,构建完整数据采集系统
相关推荐
GoGeekBaird5 小时前
我开源了 BeeWeave,给 AI Agent 搭一个越用越懂你的知识创作台
后端·github
犀利豆8 小时前
AI in Harness(四)
人工智能·后端
Hui Baby9 小时前
Spring Security
java·后端·spring
逝水无殇9 小时前
C# 运算符重载详解
开发语言·后端·c#
苏三说技术10 小时前
2026编程圈很火的10个Skills
后端
用户83562907805110 小时前
使用 Python 自动化 Excel 公式和函数:完整指南
后端·python
编程(变成)小辣鸡11 小时前
Spring事务失效场景
java·后端·spring
PinkSun11 小时前
MySQL 建表报 1030,能查不能建,排查 1 小时发现是我自己改了一行权限
后端
无相求码11 小时前
为什么 printf 可以接受任意数量参数?变长参数的底层真相
后端
郡杰11 小时前
Boot:MP|测验|结果封装|异常处理|前后联调|拦截器
后端