爬虫本质上是一个自动化的信息采集工具,能帮你从网页中提取所需内容,比如批量抓取文章或整理数据表格。Python 凭借简洁的语法和强大的库支持,成为爬虫开发的首选语言。
核心工作流程
爬虫的逻辑其实就三步,理解了这个框架,后续扩展起来会容易很多:
- 发送请求:向目标网页发起访问,就像浏览器输入网址打开页面,获取网页原始 HTML 内容;
- 解析内容:从杂乱的网页代码中筛选出有用信息,比如标题、链接、数据等;
- 保存数据:将提取的信息存储到文件或数据库,方便后续查看和分析。
环境准备与库介绍
Python 爬虫的高效离不开专用库。核心必备两个基础库,进阶场景需额外补充工具。
基础库(必装)
- requests:负责发送网络请求,快速获取网页 HTML 代码;
- BeautifulSoup4:专注解析 HTML 内容,轻松提取目标数据。
安装命令
打开命令行,输入以下命令即可:
pip install requests beautifulsoup4
进阶工具(按需安装)
- Selenium:处理动态网页(数据由 JavaScript 生成),可模拟点击、滚动等浏览器操作。
pip install selenium - Scrapy:大规模爬虫框架,支持异步爬取,适合复杂项目。
pip install scrapy
实战:编写第一个简单爬虫
以抓取百度首页的标题和所有链接为例,我们直接开始落地实操。
获取网页内容
用 requests 库向百度首页发送请求,获取 HTML 代码:
import requests
url = 'https://www.baidu.com'
response = requests.get(url)
print(response.text)
这里 requests.get(url) 是核心方法,response.text 会返回网页的纯文本 HTML 代码。实际运行时建议先打印出来看看结构,确认无误后再进行下一步。
解析网页,提取关键信息
用 BeautifulSoup 解析 HTML,先提取网页标题,再批量抓取所有链接:
from bs4 import BeautifulSoup
# 解析 HTML 内容(指定解析器为 html.parser)
soup = BeautifulSoup(response.text, 'html.parser')
# 1. 提取网页标题
title = soup.title.text
print('网页标题:', title)
# 2. 提取所有链接(<a>标签的 href 属性)
links = soup.find_all('a')
# 循环打印每个链接的文本和地址
for link in links:
link_text = link.text
link_url = link.get('href')
print(f'文本:{link_text} | 链接:{link_url}')
注意 soup.find_all('a') 可批量匹配指定标签,link.get('href') 用于提取标签的属性值。有些链接可能是相对路径,实际项目中可能需要拼接域名。
爬虫分类与适用场景
根据网页类型和需求,选择不同的爬虫方案:
- 静态网页爬虫:网页数据直接写在 HTML 中(如简单博客、静态官网),用 requests+BeautifulSoup 即可轻松爬取,适合入门练习;
- 动态网页爬虫:数据通过 JavaScript 加载(如滚动加载的列表、登录后显示的内容),需用 Selenium 模拟浏览器运行。
- 大规模爬虫:需爬取海量数据(如整站文章、行业数据),用 Scrapy 框架,支持自动去重、分布式爬取,效率更高。
常见反爬问题与解决方案
很多网站会限制爬虫访问,这 3 个技巧能帮你顺利绕过:
- 伪装请求头:模拟真实用户浏览器,避免被识别为爬虫:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
response = requests.get(url, headers=headers)
- 设置访问延迟:避免频繁请求触发限制,用 time 库添加间隔:
import time
time.sleep(2)
- 使用代理 IP:更换 IP 地址,突破 IP 封锁限制:
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'https://10.10.1.10:1080'
}
response = requests.get(url, proxies=proxies)
数据保存:把爬取的信息存起来
提取数据后,常用两种保存方式,按需选择:
保存到 CSV 文件(适合表格类数据)
import csv
with open('百度链接.csv', 'w', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
# 写入表头
writer.writerow(['链接文本', '链接地址'])
# 循环写入数据
for link in links:
writer.writerow([link.text, link.get('href')])
注意 newline='' 是为了避免空行,encoding='utf-8' 支持中文。
保存到数据库(适合长期存储、海量数据)
以轻量级 SQLite 为例(无需额外安装数据库):
import sqlite3
conn = sqlite3.connect('爬虫数据.db')
cursor = conn.cursor()
# 创建数据表(若不存在)
cursor.execute('CREATE TABLE IF NOT EXISTS links (text TEXT, url TEXT)')
# 插入数据
for link in links:
cursor.execute('INSERT INTO links (text, url) VALUES (?, ?)', (link.text, link.get('href')))
# 提交事务并关闭连接
conn.commit()
conn.close()
print('数据已保存到数据库')
核心知识点总结
- 基础流程:发送请求(requests)→ 解析内容(BeautifulSoup)→ 保存数据(CSV / 数据库);
- 工具选择:静态页用 requests+BeautifulSoup,动态页用 Selenium,大规模爬取用 Scrapy;
- 反爬技巧:伪装请求头、设置延迟、使用代理 IP;
- 关键原则:爬取数据时遵守网站 robots 协议,不频繁请求影响网站运行,不用于非法用途。
通过以上步骤,你已经掌握了 Python 爬虫的核心技能。可以试着爬取自己感兴趣的网站(如博客文章、电影榜单),多练习就能熟练运用。如果遇到具体网站的爬取问题,可针对性调整代码。


