Получить CSS-селектор или XPath на основе textContent - PullRequest
0 голосов
/ 05 октября 2019

Насколько я знаю, библиотеки Python, такие как BeautifulSoup или scrapy, могут возвращать текстовый контент для предоставленного CSS-селектора или XPath. То, что я ищу, - это наоборот: я хочу предоставить текст, который нужно очистить, и хочу получить CSS-селектор или XPath для получения этого текста.

Это то, что можно сделать с помощьюсуществующая библиотека?

html = """
<h1 class="some-class">Article title</h1>
<div class="article-text">
  <p class="article-paragraph">Article paragraph text 1.</p>
  <p class="article-paragraph">Article paragraph text 2.</p>
</div>
"""

# ... some magic here with get_selector_by_text_content()
article_title_selector = get_selector_by_text_content("Article title", html) # 'h1.some-class'
article_body_selector = get_selector_by_text_content("Article paragraph text 1. \nArticle paragraph text 2.", html) # 'div.article-text > p'

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Это будет просто //*[contains(text(),'Text')] или :contains("Text") (с помощью cssselect)

1 голос
/ 06 октября 2019

Если вы можете использовать lxml, вы можете получить xpath предоставленных текстов:

import lxml.html
from lxml import etree

targets = ['Article title','Article paragraph text 1.','Article paragraph text 2.']

root = lxml.html.fromstring(html)
tree = etree.ElementTree(root)
for e in root.iter():
    for target in targets:
        if e.text== target:
            print(tree.getpath(e))

Вывод:

/div/h1
/div/div/p[1]
/div/div/p[2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...