266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
||||||
1 | ||||||
Составить XPath путь13.04.2021, 20:55. Показов 7077. Ответов 46
Всем привет подскажите как составить xpatch мне нужны значения 66.00 и 1.03 они находятся в классе table__col _type_btn _type_normal по классу искать умею, но мне выдает все значения, а нужен xpatch как к к первому значению, так и к третьему и что бы лишних не было данных.
Кликните здесь для просмотра всего текста
0
|
13.04.2021, 20:55 | |
Ответы с готовыми решениями:
46
Существует ли такой редактор, который показывает полный XPath путь к тегу? Как в lxml составить запрос xpath? Почему xpath в xpather работает как надо, а html.xpath обрезает последний элемент Как правильно составить XPATH-запрос для HtmlAgillityPack? |
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
||||||||||||||||
16.04.2021, 20:32 [ТС] | 21 | |||||||||||||||
Например я делаю без лишних документов
С LINQ не особо дружу. Мне так вообще не удобно =) Привык только разные функции разделять если между ними нет связи) Кстати коэфициенты в новом коде попрежнему не меняются) Добавлено через 46 секунд Скорее всего, я не через гугл, ни через твиттер или фейсбук или напрямую зарегистрироваться не смог Добавлено через 16 минут
Добавлено через 15 минут Вот пример кода через документ
0
|
16.04.2021, 21:31 | 22 |
Тут дело в выражении. Когда выражение начинается с двойного слэша, узлом контекста счтиается документ. Поставь перед двойным слэшем точку и отсчет будет вестись от текущего узла.
Попробуй то, о чем я написал, если не получится - будем разбираться в чем дело.
Вот что выдает мой код у меня
1
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
||||||
16.04.2021, 22:32 [ТС] | 23 | |||||
В этом вы правы изменил выражение и сразу увидел разницу, если до этого перебирались и выводилась одна команда, то я точку поставил и они стали перебираться =)
Добавлено через 3 минуты Сейчас у меня код выглядит вот так и всё работает на ура) Осталось только сделать, чтобы коэффициенты если не доступны не брались) Спасибо вам за все объяснения прям многое узнал =) Может кому то пригодится код, в интернете подобного не находил =)
У меня также =) Документ косячный был, с другим все гуд =)
0
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
||||||
16.04.2021, 22:38 [ТС] | 24 | |||||
diadiavova, и ещё вопросик как hml привести в читаемый вид) Как на картинке
Я в спойлер вставил как он у меня выглядит, в одну строчку это дико не удобно) На сайте HtmlTigy можно, но после него у меня половина html кода исчезает в никуда.. Кликните здесь для просмотра всего текста
0
|
16.04.2021, 22:45 | 25 |
Я это делаю в программе Visual Studio Code. Там при вставке он форматируется автоматически, ну или сочетанием клавиш Alt+Shift+F
Ну понятно, что там есть ограничение на размер контента. Это надо делать в приложении с редактором хтмл, поддерживающим форматирование, не обязательно в том, которым пользуюсь я ))
0
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
|
16.04.2021, 23:13 [ТС] | 26 |
А например если форматирование есть, то выглядит вот так
А хотелось бы привести в читаемый вид как здесь например) В программе которыю вы используете есть такое?) Или может подскажете что то подобное)
0
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
|
16.04.2021, 23:47 [ТС] | 28 |
Это мощно =) Это он на автомате сам так форматирует и генерирует разметку) Нужно скачать, Sublime и notepad++ так просто не хотят творить чудеса)
Добавлено через 20 минут diadiavova, программа бомба для таких целей)
0
|
17.04.2021, 07:55 | 29 | |||||
Программа вообще хорошая, не только для таких целей. Кстати форматировать можно и своим кодом, например так
1
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
||||||
17.04.2021, 13:06 [ТС] | 30 | |||||
Сохраню код =) Для быстрых решений подходит идеально =)
Добавлено через 2 минуты diadiavova, сделал код на все события что нужны и отфильтровал через if чтобы не было команды с недоступными коэффициентами =) Интересно как его уменьшить или вынести в отдельные методы, чтобы не таким страшным был =) Кликните здесь для просмотра всего текста
Добавлено через 1 минуту Вынес в переменные всё, потому что ко всем этим данным нужен доступ по отдельности)
0
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
|
17.04.2021, 13:37 [ТС] | 31 |
Вот сам проектик =) delete2.rar В принципе он не основной =) Для ознакомления парсинга и т.п =)
0
|
17.04.2021, 16:42 | 32 | |||||
Ну, насчет того, чтобы сильно уменьшить, я не уверен, что это можно сделать так, чтобы не в ущерб читабельности кода. Но кое-что сделать можно. В частности у тебя тут ест повторяющийся код, который отличается только индексом ячейки второй команды, можно индекс просто вычислить. Кроме того есть неразумные вещи, типа получение кода узла, с последующей обработкой его как текста. Дело в том, что HAP имеет возможность работать с классами, там есть, в частности, метод, проверяющий наличие того или иного класса у узла. Я бы сделал примерно так
И еще: у тебя в проекте хтмл-документ просто загружен в папку дебаг. Так делать не надо. Надо добавить его в проект, а в свойствах элемента проекта указать, что он должен копироваться при сборке. Иначе при очистке проекта файл просто потеряется. Добавлено через 2 минуты И я не уверен, что при проверке условия правильно использовать именно ||, а не &&. Но я ориентировался на твой код, так что смотри уже сам.
1
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
|
17.04.2021, 19:23 [ТС] | 33 |
diadiavova, спасибо, расшарю этот этот код =)
Добавлено через 1 минуту Да работает одинаково, но || когда то показал что лучше, так и привык =) Добавлено через 2 минуты Верно подмечено, но это не основной проект и + я в нем даже дизайн вообще никакой не делал, просто компоненты кинул чтобы работали и все ок =) В основном проекте вывод через datagridview =) Но я у меня привычка если что то протестить и понять как работает, создаю отдельный проект и в нем проверяю как и что )
0
|
17.04.2021, 20:32 | 34 |
Так это разные операторы и результат дают разный. Когда ты проверяешь условие в рамках одного узла, то все логично - тебе нужно, чтобы узел имел хотя бы один из этих классов, но когда проверка выполняется между узлами (в моем коде это 17-я строка), то тут в случае использования || проверяется, что хотя бы один из узлов содержит один из указанных классов, а если нужно, чтобы таковой присутствовал непременно в обоих узлах, то нужно использовать &&.
Добавлено через 2 минуты xellan24rus, и да, еще такое мелкое замечание. Вот ты говоришь, что не любишь линк, а вот мне интересно, как бы выглядело твое выражение проверки (то, которое в if-е), если бы и классов было побольше и узлов нужно было бы проверить достаточно много? Неужели все варианты перечислял бы? ))
1
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
|
17.04.2021, 22:19 [ТС] | 35 |
Принял к сведениям =)
Добавлено через 6 минут Суть в том что я беру в данном случае все таблицы с играми и каждую перебираю по одной и из этих таблиц беру все команды и по одной их перебираю =) То есть 1 команда один блок кода от родительского класса =) И вот так string filtr_win_one = komand.SelectSingleNode("./td[3]").OuterHtml; я получаю имя класса для обработки через if, классы могут 5 имен принять от разных событий игры и вот эти имена класса сравниваю, если они мне не подходят, то я пропускаю и не вношу никаких данных в форму =) Линк конечно хорошо, изучу со временем, то что благодаря вам узнал разные подходы и понял про xpath и как делать не надо =) Хочу вынести в основной проект и закончить его быстрее =) А там уже можно и линк пробовать изучать =) Добавлено через 13 минут То есть я не работаю с целым документом если в этом нет нужды =) Добавлено через 56 минут Все равно не пойму как это работает) Как вы перебрали победу второй команды) Ведь там много классов td, в случае со второй командой мне только 5 и 4 позиция нужна =) И то 4 нужна если нету ничьей =) Добавлено через 1 минуту И в целом не понимаю когда условие if (validTeam(tds[2]) || validTeam(tds[team2Index])) знает что нужно брать validTeam(tds[team2Index])
0
|
17.04.2021, 22:26 | 36 |
Ну как это определяется, если просто смотреть на таблицу в браузере? Где двоечка в заголовочной части, там и вторая команда. Вот я и беру первую строку tbody, нахожу первую ячейку, содержащую двойку и подсчитываю сколько ячеек ей предшествует. После этого прибавляю единичку к этому числу и получаю индекс, актуальный для всех матчей данного tbody.
Функция определена в 7-ой строке кода. Она проверяет ячейку на наличие одного из классов. Вот я и передаю ей по очереди нужные ячейки и объединяю условие. Здесь, в общем-то, ничего сложного нет.
1
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
|
17.04.2021, 22:44 [ТС] | 37 |
Понял, это я запутался уже =)
Добавлено через 2 минуты Я так хотел и хотел изначально сделать, но так примерами xpath не смог объяснить, а вы суть поняли уже исходя из кода и результатов =) Буду дальше расшаривать код =) С этого сайта парсить больше не чего) Сделаю просто красивый вывод в datagrid =)
0
|
17.04.2021, 23:46 | 38 |
Это не обязательно делать с помощью xpath, с таким же успехом можно было получить все ячейки и вычислить индекс той, которая содержит число 2 или даже пойти по еще более простому пути - проверять четвертую ячейку и уже в зависимости от того, что в ней (двойка или нет) брать нужный. В любом случае это лучше чем, перечислять виды спорта, я уже не говорю о дублировании кода, от которого всегда можно избавиться, например вынеся повторяющийся код в отдельный метод, а отличающиеся элементы кода(в данном случае индекс ячейки) сделать параметрами метода. Ну это такой универсальный способ.
Ну я догадался, что в коде есть различия, но найти было не так просто. ))
0
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
||||||
17.04.2021, 23:56 [ТС] | 39 | |||||
Ещё один такой момент в коде например Лига: Футбол Австралия А-лига не спарсила команды, если ещё вниз опуститься, то тоже есть места где нет команды, а лиги есть. Код при этой лиги доходит до if то условие не срабатывает. И когда я делаю вот так foreach (HtmlNode tr in matches)
0
|
266 / 213 / 38
Регистрация: 08.04.2020
Сообщений: 895
|
|
18.04.2021, 00:00 [ТС] | 40 |
Я отталкиваясь от 2 вообще не смог путь составить, хотя этот метод хороший и без дублей =) А код я на скорую руку писал, лишь бы проверить) В основных проектах стараюсь покрасивее делать если это возможно моему опыту =)
Добавлено через 1 минуту Пробовал по разному, но вывод в итоге один был =) И как вы говорили что лучше кодом объяснить чем словами что нужно =) Хотя и кодом не всегда легко сказать что от него нужно =)
0
|
18.04.2021, 00:00 | |
18.04.2021, 00:00 | |
Помогаю со студенческими работами здесь
40
Доработка макроса: составить путь к файлу из двух ячеек по условию Составить дифференциальное уравнение и вычислить тормозной путь поезда при торможении на спуске Составить программу которая выводит полный путь к исполняемому файлу этой программы Th:replace не воспринимает рендереный путь. Но работает, если путь захардкодить Как полный путь преобразовать в путь для коммандной строки? Возврат на истинный путь, или как вернуться на путь программиста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |