Как получить все xpath, которые соответствуют заданному регулярному выражению? - PullRequest
0 голосов
/ 12 сентября 2018

Существует ли какая-либо библиотека python, которая облегчает получение xpath-узлов dom, соответствующих заданному регулярному выражению?

Я пытаюсь получить пару вопросов и ответов со страницы часто задаваемых вопросов

это три разных пути ответов с этого сайта

xpath1: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[7]/div[1]/a/span
xpath2: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[10]/div[1]/a/span
xpath3: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[3]/div[1]/div[1]/div[1]/a/span

Теперь пусть регулярное выражение будет примерно таким:

/html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/ * / * / * /div[1]/a/span

возможно ли получить все xpath, которые удовлетворяют регулярному выражению, которое мы строим, через некоторую библиотеку в python?

Я пытался использовать селекторы «scrapy» для получения всех вопросов, но при получении ответов это не помогло, поэтому я хочу просмотреть все вопросы и затем получить их ответы, для этого я хочу задать вопрос Xpaths

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Наконец-то я нашел решение для этого с комбинацией lxml и scrapy.использовал ответ @Andersson для поиска всего текстового содержимого с помощью селектора, а затем для каждого текста, перебрал дерево и использовал tree.getpath () из lxml

Решение не основано на регулярных выраженияхно решил мой вариант использования, так что разместив его

import requests
from lxml import html

def get_xpath_for_text(tree, text):
 try:
    for tag in tree.iter():
        if tag.text and tag.text == text:
            return tree.getpath(tag)
    return ' '
 except Exception as e:
    return ' '

 webpage = requests.get(url)
 html_content = html.fromstring(webpage.text)
 tree= html_content.getroottree()
 get_xpath_for_text(tree, text)
0 голосов
/ 12 сентября 2018

Вам не нужен инструмент или регулярные выражения (а также абсолютные выражения XPath). Попробуйте использовать ниже XPath, чтобы соответствовать всем вопросам на странице:

//div[@class="ClsInnerDrop"]/a

Если вы не знаете, как написать свои собственные селекторы, проверьте этот чит-лист

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...