python爬虫: 数据解析

文章目录

数据解析

在大多数情况下, 我们并不需要整个页面的内容, 只需要一小部分, 这里就涉及到了数据提取的问题

下面介绍四种解析方式:

  • re解析
  • bs4解析
  • xpath解析
  • pyquery解析

这四种方式可以混合使用, 完全以结果为导向

网页前端结构

一个网页是由三个部分组成的: 分别是:HTML, CSS, JS(JavaScript)

  • HTML:超文本标记语言,由一堆预设的标签(<h1>一级标题</h1>)构成。HTML 负责网页的结构(页面元素和内容)
  • CSS:层叠样式表。CSS 负责网页的表现(页面元素的外观、位置等样式,如颜色、大小等)
  • JS:全称为 JavaScript,简称 JS。负责网页的行为(交互效果)
  • HTML: 超文本标记语言。
    • 超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。
    • 标记语言:由标签 "<标签名>" 构成的语言
      • HTML 标签都是预定义好的。例如:使用<h1>展示标题,使用<img>展示图片,使用<video>展示视频。
      • HTML 代码直接在浏览器中运行,HTML 标签由浏览器解析

网页解析

网页解析指的是从原始HTML文档中提取数据的过程, 也是网络爬虫的关键步骤, 从一堆标签文本中提取出需要的数据.

lxml库

lxml: 是一个高性能的HTML/XML 文档的解析库, 支持基于Xpath 语法来解析获取网页数据

安装: pip install lxml

Xpath语法

Xath: 是一种用在HTML/XML文档中导航或定位元素的查询语言, 可以准确的定位文档中的特定元素, 属性或文本

表达式 描述 样例
/ 从根节点的直接子元素 /html/body/div/h1
// 从任意位置选择节点 //h1
. 当前节点下查找 ./a 与 .//a
[n] 选择第 n 个元素 //p[2]
[last()] 选择最后一个元素 //p[last()]
[@attr] 选择有该属性的元素 //p[@color]
[@attr='value'] 选择该属性值等于指定值的元素 //p[@color='red']
* 匹配任何元素节点 //body/div/*
@* 匹配元素的任何属性 //body/div/a/@*
text() 获取文本内容 //div/p/text()

使用示例:

python 复制代码
import requests
from lxml import html


target_url = 'https://www.tiobe.com/tiobe-index/'

# 发送请求, 获取数据
response = requests.get(target_url)

# 输出数据到控制台
# print(response.text)
document = html.fromstring(response.text)

with open('index.html', 'w', encoding='utf-8') as f:
    f.write(response.text)


# 解析数据
# 解析表头
th_list = document.xpath("//table[@id = 'top20']/thead/tr/th/text()")
print("thead: ")
print(th_list)

tr_list = document.xpath("//table[@id = 'top20']/tbody/tr")
print("tbody: ")
for tr in tr_list:
    td_list = tr.xpath("./td/text()")
    print(td_list)
相关推荐
最强小杰1 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
DeepVisionary2 小时前
为拿并网许可,OpenAI在佐治亚新园区同意高峰期断电三成
python·自动化
揽星河..2 小时前
【C语言】指针
c语言·开发语言
小小数媒成员2 小时前
UGUI原理(一)
开发语言·游戏·unity·游戏引擎
VIP_CQCRE2 小时前
内容自动化越跑越乱?先补上状态、去重和失败恢复
python·ai·工作流·幂等设计·内容自动化
速易达网络3 小时前
Three.js 动画入门教学:从场景搭建到流畅动效
开发语言·javascript·ecmascript
福大大架构师每日一题3 小时前
excelize v2.11.1发布:Go 1.26.0起步,16项安全修复与嵌入对象能力全面升级
开发语言·安全·golang
我喜欢就喜欢3 小时前
RAG 重排序 Rerank 实战:用 bge-reranker 把 Top-K 命中率拉回来
python·大模型·向量检索·rag·rerank
Sarvartha3 小时前
集合概述 & Collection 接口
开发语言