一、前言:什么是网络爬虫?
网络爬虫(Web Crawler),又称网页蜘蛛,是一种自动化程序,用于模拟人类浏览器行为,从互联网上抓取网页数据。在大数据时代,获取数据是第一步,而爬虫技术正是打开网络信息宝库的钥匙。
Python 之所以成为爬虫领域的首选语言,是因为其简洁的语法和强大的第三方库(如 requests
、BeautifulSoup
、lxml
、Scrapy
、selenium
等)。
二、爬虫流程概览
一个基本的网络爬虫包含以下五个步骤:
- 发送请求(如 GET/POST)
- 获取网页源码(HTML)
- 解析网页结构,提取目标数据
- 存储数据(本地/数据库/Excel)
- 处理反爬机制(如 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 |
九、案例拓展:热门网站数据采集
-
知乎回答数据
- 登录保护复杂
- 推荐使用 selenium+cookie 模拟登录
-
微博热搜列表
- 动态内容,用 selenium 获取完整渲染内容
-
招聘网站(如拉勾网、Boss)
- 反爬严格,推荐使用代理池与模拟登录
十、总结与建议
学习爬虫不仅是提升编程能力的重要一步,也为数据分析、机器学习、商业情报等领域打下坚实基础。建议从静态页面抓取起步,逐步掌握动态内容处理、验证码应对、框架搭建与数据存储等技能。
学习路径建议:
- 掌握 requests、BeautifulSoup 的基本用法
- 学会使用 selenium、cookie 模拟登录
- 构建小型项目(如爬取书籍、招聘信息)
- 学习 Scrapy 框架,提高开发效率
- 结合数据库,构建完整数据采集系统