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. 结合数据库,构建完整数据采集系统
相关推荐
我最厉害。,。1 小时前
接口安全&SOAP&OpenAPI&RESTful&分类特征导入&项目联动检测
后端·restful
AntBlack3 小时前
计算机视觉 : 端午无事 ,图像处理入门案例一文速通
后端·python·计算机视觉
福大大架构师每日一题5 小时前
2025-06-02:最小可整除数位乘积Ⅱ。用go语言,给定一个表示正整数的字符串 num 和一个整数 t。 定义:如果一个整数的每一位都不是 0,则称该整数为
后端
Code_Artist5 小时前
[Mybatis] 因 0 != null and 0 != '' 酿成的事故,害得我又过点啦!
java·后端·mybatis
程序员博博5 小时前
看到这种代码,我直接气到想打人
后端
南雨北斗5 小时前
php 图片压缩函数
后端
L2ncE5 小时前
ES101系列08 | 数据建模和索引重建
java·后端·elasticsearch
还是鼠鼠5 小时前
Maven---配置本地仓库
java·开发语言·后端·maven
无问8175 小时前
SpringBoot:统一功能处理、拦截器、适配器模式
spring boot·后端·适配器模式
一只叫煤球的猫6 小时前
MySQL虚拟列:一个被低估的MySQL特性
数据库·后端·mysql