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)
相关推荐
蹊黎2 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
IT_Octopus7 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
2603_965148117 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
程序猿追8 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓8 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播8 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
CCblandy8 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
墨云安全9 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
摇滚侠9 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y9 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python