Как извлечь содержимое и родительские элементы HTML из веб-страницы? - PullRequest
0 голосов
/ 12 мая 2019

Допустим, у вас есть веб-страница:

<html>
<head>
<meta name="description" content="Hello World Test">
</head>
<body>
<h1>Hello World!!!</h1>
<p>How are you today?</p>
<p>What have you been up to?</p>
</body>
</html>

Есть ли способ затем перебрать узлы на странице и затем, если узел содержит текст, извлечь текст?

Я бы тогда хотел организовать текст по Xpath.

Так что выше будет:

/ html / body / h1: Hello World !!!

/ html / body / p [1]: Как поживаете сегодня?

/ html / body / p [2]: Чем ты занимался?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Вы можете использовать XPath из, например, библиотеки lxml, чтобы перебирать все узлы HTML и извлекать содержимое с путями, если повторяющийся узел содержит какой-либо текст:

from lxml import html

tree = html.fromstring("""
<html>
 <head>
  <meta content="Hello World Test" name="description"/>
 </head>
 <body>
  <h1>Hello World!!!</h1>
  <p>How are you today?</p>
  <p>What have you been up to?</p>
 </body>
</html>
""")

for node in tree.iter():
    if node.text and node.text.strip():
        print(node.getroottree().getpath(node), node.text)

/ html / body /h1 Hello World !!!

/ html / body / p [1] Как дела сегодня?

/ html / body / p [2] Чем вы занимались?

0 голосов
/ 12 мая 2019

Вот решение, если вы используете селен.

nodes = driver.find_elements_by_xpath("//body/*")
for node in nodes:
    nodepath =''
    nodeText = node.text
    while node.tag_name!='html':
        nodepath = node.tag_name + "/" + nodepath
        node = node.find_element_by_xpath("./..")
    print('html/' + nodepath[0:-1] + ":" + nodeText)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...