lxml-html读取产生空列表Python 3.6.4

时间:2018-02-06 18:59:43

标签: python python-3.x parsing xpath lxml

我正在尝试从此链接读取STRaND-1的两个线元素:http://celestrak.com/NORAD/elements/cubesat.txt,因此我可以从我正在构建的地面站跟踪它。我真的不明白如何使用xtree.xpath命令,我想学习如何。 我正在尝试以下代码,这些代码是我刚才在这里提出的类似问题中找到的:

import numpy as np
from lxml import html
import requests
line_number = 50
for word in range(0,5):
    page = requests.get("http://celestrak.com/NORAD/elements/cubesat.txtid=%s" % word)
    tree = html.fromstring(page.text)
    print (tree.xpath("//b/text()")

这应该在html页面的元素之间打印代码吗?我如何从某一行打印?特别是在我想要的文本之前没有html前缀的时候?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

尝试以下解决方案以获取所需数据:

import requests

url = "http://celestrak.com/NORAD/elements/cubesat.txt"
response = requests.get(url)

page_content = response.text
all_lines = [line.strip() for line in page_content.split("\n")]
for index, line in enumerate(all_lines):
    if line == "STRAND-1":
        first_value = all_lines[index + 1]
        second_value = all_lines[index + 2]
        break

print(first_value, "\n", second_value)

输出:

1 39090U 13009E   18037.58367953  .00000016  00000-0  21168-4 0  9998 
 2 39090  98.5328 245.5663 0008674 331.4360  28.6349 14.35009671259097

答案 1 :(得分:1)

我在安德森的帮助下想出了如何做到这一点。 (万分感谢!)

使用urllib.request.urlopen,一个基本的for循环和.decode utf-8我得到了它的工作。没有甚至需要lxml。我知道这远非这个逻辑的最优雅的实现,并且任何有关如何清理它并压缩它的输入将不胜感激,但至少它对我有用。

我的代码:

from urllib.request import urlopen


line_number1 = 50
line_number2 = 1

with urlopen("http://celestrak.com/NORAD/elements/cubesat.txt") as TLEDB:
    i = 1
    for line in TLEDB:
        if i == line_number1:
            break
        i += 1
    line1 = line.decode("utf-8")
    print(line1)

    n = 1
    for line in TLEDB:
        if n == line_number2:
            break
        n += 1
    line2 = line.decode("utf-8")
    print(line2)

再次感谢您的帮助。