Python爬虫入门实战:从零开始爬取网页数据(附完整代码)
一、爬虫核心原理与技术栈选型
1.1 爬虫核心原理
请求发送:向目标网站服务器发送请求(如GET、POST请求),携带必要的请求头(User-Agent、Cookie等)以模拟浏览器行为;
响应解析:接收服务器返回的响应数据(HTML、JSON等格式),从中提取所需的目标数据;
数据存储:将提取到的数据保存到本地文件(如CSV、Excel)或数据库(如MySQL、MongoDB)中。
1.2 入门技术栈选型
requests:用于发送HTTP请求,替代Python内置的urllib库,API更简洁,处理Cookie、会话等更方便;
BeautifulSoup4(bs4):用于解析HTML文档,支持CSS选择器和标签选择器,能快速提取网页中的文本、属性等数据;
pandas:用于数据整理和存储,可快速将提取的数据写入CSV、Excel文件。
pip install requests bs4 pandas二、实战:爬取博客文章列表数据
2.1 步骤1:分析目标网页结构
文章列表容器:<div class="article-list">
单篇文章项:<div class="article-item">
文章标题:<a class="article-title" href="文章链接">标题文本</a>
发布时间:<span class="publish-time">时间文本</span>
阅读量:<span class="read-count">阅读量文本</span>
2.2 步骤2:编写爬虫代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
def crawl_article_list():
# 1. 目标URL
url = "https://example-tech-blog.com/articles"
# 2. 构造请求头,模拟浏览器访问(关键:避免被服务器识别为爬虫)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
try:
# 3. 发送GET请求
response = requests.get(url, headers=headers)
# 检查请求是否成功(状态码200表示成功)
response.raise_for_status()
# 设置响应编码,避免中文乱码
response.encoding = response.apparent_encoding
# 4. 解析HTML文档
soup = BeautifulSoup(response.text, "html.parser") # 使用html.parser解析器
article_list = soup.find("div", class_="article-list") # 找到文章列表容器
article_items = article_list.find_all("div", class_="article-item") # 找到所有文章项
# 5. 提取目标数据
data = []
for item in article_items:
# 提取标题和链接
title_tag = item.find("a", class_="article-title")
title = title_tag.get_text(strip=True) # strip=True去除前后空格
link = title_tag["href"] # 获取href属性值
# 提取发布时间
publish_time = item.find("span", class_="publish-time").get_text(strip=True)
# 提取阅读量(需处理文本,如"阅读量:1234"→1234)
read_count_text = item.find("span", class_="read-count").get_text(strip=True)
read_count = int(read_count_text.replace("阅读量:", "")) # 替换无关文本并转为整数
# 将数据添加到列表
data.append({
"文章标题": title,
"发布时间": publish_time,
"阅读量": read_count,
"文章链接": link
})
# 6. 数据存储(写入CSV文件)
df = pd.DataFrame(data)
df.to_csv("article_list.csv", index=False, encoding="utf-8-sig")
print("爬虫执行成功!数据已保存到 article_list.csv")
except Exception as e:
print(f"爬虫执行失败:{str(e)}")
# 执行爬虫函数
if __name__ == "__main__":
crawl_article_list()2.3 步骤3:代码运行与结果验证
url替换为实际可爬的目标网页URL;article_list.csv文件;三、爬虫开发关键注意事项
3.1 遵守robots协议,合法爬取
3.2 控制爬取频率,模拟正常访问
使用
time.sleep()添加请求间隔(如每次请求后暂停1-3秒);使用代理IP池轮换IP;
合理设置请求头,除了User-Agent,还可添加Referer等字段,增强浏览器模拟度。
3.3 处理动态加载页面
通过开发者工具的“网络”面板捕获AJAX请求,直接请求数据接口(返回JSON格式,解析更简单);
使用Selenium、Playwright等工具模拟浏览器渲染,获取动态加载后的页面数据。
3.4 尊重数据版权,合理使用数据
四、进阶学习方向
动态网页爬取:学习Selenium、Playwright的使用;
分布式爬虫:使用Scrapy框架搭建高并发、可扩展的爬虫系统;
反爬机制突破:学习验证码识别(OCR)、滑块验证破解等;
数据可视化:结合Matplotlib、ECharts等工具,将爬取的数据可视化展示。


