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 小时前
某米应用商店爬虫:爬取APP榜单数据,分析应用市场格局
爬虫
学习星球1 小时前
AI 一句话生成 3D 游戏世界:腾讯 HY-World 2.0 开源深度解析与本地实战
开发语言·人工智能·游戏·3d·ai·课程设计·ai编程
名字还没想好☜1 小时前
Go 用 -race 抓数据竞争:一个偶发崩溃的排查、原理与修复
开发语言·后端·golang·go
AR-26710-1 小时前
机器学习复习收官Day12
人工智能·python·机器学习·scikit-learn
xzal121 小时前
Python之filter()和map()的区别(仅供学习参考)
笔记·python
小灰灰搞电子1 小时前
Rust std::vec::Vec<T>动态数组:所有相关 API 全面介绍
开发语言·rust
学习星球1 小时前
CodeWhale 深度剖析:从 DeepSeek-TUI 到 40.9K Star 的 Rust 终端编程 Agent
开发语言·后端·rust
随遇而安zx1 小时前
【地基篇】---JVM 类加载 源码解析(基于 Java 8)
java·jvm·python
曹牧2 小时前
C#:线程间操作无效,不是从创建控件线程访问
开发语言·c#