恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Python lxml + XPath 网页解析实战,高性能静态页面数据提取
首页
资讯中心
/
Python lxml + XPath 网页解析实战,高性能静态页面数据提取
Python lxml + XPath 网页解析实战,高性能静态页面数据提取
发布时间:2026/10/14 17:14:13
前言做网页数据采集时很多人首选 BeautifulSoup但是当页面 HTML 量大需要解析上千条数据的时候lxml 库的解析速度优势就体现出来了。lxml 底层是 C 语言实现解析性能远高于纯 Python 实现的 BeautifulSoup搭配 Xpath 语法可以非常灵活定位页面元素。Xpath 是 XML/HTML 文档的路径语言可以直接根据标签、属性、文本内容定位节点熟练之后写提取代码效率很高。本文讲解 lxmlXpath 基础语法结合 requests 获取网页源码提取列表、文本、属性对比 bs4 的优缺点同时继续强调爬虫采集合规规范。一、环境安装pip install requests lxmllxml 支持 HTML 和 XML 解析支持 Xpath1.0 语法。二、基础用法将网页源码转为 lxml 对象import requests from lxml import etree import random import time 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 } url https://example.com resp requests.get(url, headersheaders, timeout10) resp.encoding utf-8 # 将网页文本转为可解析的HTML对象 html etree.HTML(resp.text) # xpath提取页面标题文本 title html.xpath(//title/text()) print(页面标题, title[0])etree.HTML 会自动修复残缺 HTML 标签网页源码不规范也能正常解析。xpath 返回结果永远是列表即使只有一条数据。三、常用 Xpath 语法实战# 查找页面所有a标签 all_a html.xpath(//a) for a in all_a: # 获取a标签href属性 link a.xpath(./href) # 获取a标签内文本 text a.xpath(./text()) print(link, text) # 根据class属性筛选div items html.xpath(//div[classlist-item]) data_list [] for item in items: title item.xpath(.//h3/text()) desc item.xpath(.//p[classdesc]/text()) link item.xpath(.//a/href) row_data { title: title[0].strip() if title else , desc: desc[0].strip() if desc else , link: link[0] if link else } data_list.append(row_data) time.sleep(random.uniform(0.5, 1.5))//代表全局搜索标签.代表在当前节点内部查找属性名读取标签属性。Xpath 支持模糊匹配contains(class,item)匹配 class 包含 item 的元素。四、分页采集思路很多网站数据分页展示我们可以循环构造分页 url分批采集每次请求增加随机延时。def get_page_data(page_num): page_url fhttps://example.com/list?page{page_num} resp requests.get(page_url, headersheaders, timeout10) html etree.HTML(resp.text) items html.xpath(//div[classlist-item]) page_data [] for item in items: # 提取字段逻辑同上 title item.xpath(.//h3/text()) if title: page_data.append(title[0].strip()) return page_data all_data [] for page in range(1, 4): page_result get_page_data(page) all_data.extend(page_result) print(f第{page}页采集完成) time.sleep(random.uniform(1,2)) print(全部采集完成总数据量, len(all_data))分页采集不要设置太大页数学习测试只采集少量页面。五、lxml 与 BeautifulSoup 对比lxml 解析速度更快适合大批量 HTML 解析BeautifulSoup 语法简单新手友好lxml 依赖底层 C 库部分特殊环境安装会报错bs4 安装更简单Xpath 语法通用性强Selenium、Playwright 同样支持 Xpath 定位元素。六、爬虫合规与反爬注意事项随机休眠代替固定 sleep模拟人浏览网页的时间间隔不要伪造 Cookie 登录账号采集登录态采集属于高风险行为禁止采集受版权保护的文章、图片不可二次分发采集数据一旦发现请求大量返回 403立刻停止脚本不要尝试更换 IP 暴力爬取。七、结语lxmlXpath 是网页采集领域经典组合很多成熟爬虫项目都在用。Xpath 学会之后不仅静态网页能用后续学习动态网页自动化工具也能复用这套定位元素的思路。Xpath 的难点在于语法调试推荐浏览器自带开发者工具测试 xpath 表达式。静态网页采集掌握之后下一步可以学习如何把采集的数据存入 SQLite 数据库。后续会分享网页图片采集的合规方案欢迎关注博主。