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 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1232 天前
2026年第38周GitHub趋势周报
python·科技·github