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. 结合数据库,构建完整数据采集系统
相关推荐
青灯文案124 分钟前
Spring Boot 的事务注解 @Transactional 失效的几种情况
java·spring boot·后端
CF14年老兵1 小时前
2025 年每个开发人员都应该知道的 6 个 VS Code AI 工具
前端·后端·trae
think1231 小时前
带你走进Spring Cloud的世界
spring boot·后端·spring cloud
没逻辑1 小时前
Goroutine 死锁定位与调试全流程
后端
无限大62 小时前
Java 随机数生成:从青铜到王者的骚操作指南
后端·程序员
二闹2 小时前
后端开发:这5个技巧让你少写一半代码!
java·后端·project lombok
泉城老铁2 小时前
Spring Boot 应用打包部署到 Tomcat ,如何极致调优看这里
java·spring boot·后端
crossoverJie2 小时前
StarRocks 如何在本地搭建存算分离集群
数据库·后端
程序视点2 小时前
【2025最新】Cursor安装-订阅-使用全流程指南!你不得不用的AI编程神器!
前端·后端·cursor
武子康3 小时前
大数据-59 Kafka 拦截器全解析:原理、拦截链机制与自定义实现实战
大数据·后端·kafka