Python 网络爬虫实战:从原理到数据抓取与存储
什么是网络爬虫?
网络爬虫(Web Crawler),又称为网页蜘蛛或网络机器人,是一种按照既定规则自动抓取万维网信息的程序或脚本。简单来说,它是互联网上的信息搬运工。
爬虫的基本规则
在编写爬虫之前,必须了解并遵守相关规则,尤其是 robots.txt 协议。这是一个存放在网站根目录下的文本文件,用于告知搜索引擎哪些内容可以抓取,哪些禁止抓取。遵循此协议是合法合规爬取数据的前提。
爬虫工作原理
爬虫的工作流程通常包含以下步骤:
- 发送请求:向目标服务器发送 HTTP 请求。
- 获取响应:接收服务器返回的 HTML、JSON 等数据。
- 解析数据:从响应中提取所需信息。
- 保存数据:将提取的数据存储到本地数据库或文件中。
- 循环迭代:根据链接继续抓取下一页或新页面。
项目背景与环境准备
本次实战以爬取某木材价格指数网站的红木价格数据为例,旨在演示如何从静态网页中批量获取结构化数据。
开发环境
- 语言版本:Python 3.7+
- 集成开发环境:PyCharm 或 VS Code
- 浏览器:Chrome(用于抓包分析)
依赖库安装
我们需要安装以下第三方库:
pip install requests lxml
代码中涉及的库说明:
requests:用于发送 HTTP 请求。lxml:高效的 XML/HTML 解析库,支持 XPath。csv:标准库,用于将数据写入 CSV 文件。time/random:用于控制请求频率,模拟人类行为。
第一步:网页结构分析
打开目标网站,按 F12 打开开发者工具,切换到 Network 标签页。刷新页面后,观察请求列表。我们关注的是包含数据的接口请求。
通过观察可以发现:
- 请求方式:GET。
- 请求参数:URL 中包含分页参数(如
page.curPage)和搜索关键词。 - 请求头:包含
User-Agent等信息,用于标识客户端身份。
为了模拟真实浏览器访问,我们需要构造包含 User-Agent 的请求头,否则服务器可能识别为脚本而拒绝服务。
第二步:单页数据抓取与解析
首先尝试抓取第一页数据。使用 requests.get() 发送请求,并使用 lxml.etree 解析 HTML。
核心代码实现
import csv
import time
import random
import requests
from lxml etree
headers = {
:
}
url =
:
response = requests.get(url, headers=headers, timeout=)
response.encoding = response.apparent_encoding
html = response.text
parse = etree.HTML(html)
all_tr = parse.xpath()
tr all_tr:
name = .join(tr.xpath()).strip()
price = .join(tr.xpath()).strip()
unit = .join(tr.xpath()).strip()
supermarket = .join(tr.xpath()).strip()
time_str = .join(tr.xpath()).strip()
data = {
: name,
: price,
: unit,
: supermarket,
: time_str
}
(data)
Exception e:
()


