Python3.6.4中lxml-html读取空列表及XPATH提取STRaND-1轨道元素问题
解决方案:提取STRaND-1的轨道元素 + Xpath入门
嘿,我来帮你搞定这两个问题——先解决你当下的轨道元素提取需求,再给你讲清楚Xpath的用法~
为什么你的lxml-html会返回空列表?
首先得明确:你要读取的目标链接是纯文本文件,不是HTML或XML文档。而lxml.html的xpath()方法是用来解析带标签结构的文档(比如HTML网页、XML文件)的,纯文本里没有任何HTML标签节点,所以用xpath自然找不到内容,返回空列表是正常的。
正确提取纯文本中的STRaND-1轨道元素
针对纯文本的TLE(两行轨道元素)数据,我们直接用requests获取文本内容,然后按行筛选即可。Celestrak的TLE格式是每个卫星占3行:第一行是卫星名称,第二、第三行就是轨道元素。所以我们只需要找到包含STRaND-1的行,然后取它后面的两行就行。
代码示例(Python 3.6.4兼容):
import requests # 获取TLE文本内容 url = "https://celestrak.org/NORAD/elements/cubesat.txt" response = requests.get(url) response.raise_for_status() # 确保请求成功 tle_lines = response.text.splitlines() # 寻找STRaND-1的轨道元素 strand1_tle = [] for idx, line in enumerate(tle_lines): if "STRaND-1" in line: # 取后面两行轨道元素(如果你需要包含名称行,可以改成tle_lines[idx:idx+3]) strand1_tle = tle_lines[idx+1:idx+3] break if strand1_tle: print("STRaND-1的轨道元素:") print(strand1_tle[0]) print(strand1_tle[1]) else: print("未找到STRaND-1的轨道元素")
Xpath基本用法入门(针对HTML/XML场景)
既然你想学习xpath()命令,我给你举几个实用的例子,都是基于HTML文档的:
首先,假设我们有一段简单的HTML:
<html> <head> <title>测试页面</title> </head> <body> <div class="content"> <p id="first">第一个段落</p> <p class="info">第二个段落,包含<a href="link.html">链接</a></p> </div> </body> </html>
用lxml.html解析后,常用的xpath写法:
- 提取页面标题:
tree.xpath("//title/text()")——//title匹配所有title节点,/text()取节点内的文本内容,返回列表['测试页面'] - 提取id为first的p标签文本:
tree.xpath("//p[@id='first']/text()")——[@id='first']是属性筛选,返回['第一个段落'] - 提取所有class为info的p标签里的链接文本:
tree.xpath("//p[@class='info']/a/text()")—— 链式选择子节点,返回['链接'] - 提取所有p标签的文本:
tree.xpath("//p/text()")—— 返回['第一个段落', '第二个段落,包含'](注意链接文本是单独的子节点,所以不会包含在这里) - 提取链接的href属性值:
tree.xpath("//a/@href")—— 返回['link.html']
简单总结xpath的核心逻辑:
//表示从任意位置开始查找节点/表示从当前节点的直接子节点查找[@属性名='属性值']用来筛选带有指定属性的节点/text()用来提取节点内的文本内容/@属性名用来提取节点的属性值
内容的提问来源于stack exchange,提问作者Lorcank11
相关产品推荐
相关产品推荐

