Шаблонный компилятор для тега span html

0

Привет, я работаю над проектом в облачных вычислениях - амазонке. Часть кода, на которой я застрял, - это получение списка желаний пользователя с amazon. Поскольку есть ограничения на ограничения, я сделал весь исходный источник страницы, указав URL-адрес списка пожеланий. Чтобы извлечь itemID, я использовал шаблон, подобный

Pattern p = Pattern.compile("/dp/(\\w+)/");
                    Matcher matcher = p.matcher(content);

Это было легко, и теперь он правильно перечисляет все продукты с их itemId в этом списке пожеланий. Мне также нужна цена за каждого. Согласно источнику страницы, цена

<span class="a-size-base a-color-price a-text-bold">
                      $7.19
                    </span>

Мне нужно написать шаблон для этого, и я все запутался и застрял. Я сосать выражения Regex. Может ли кто-нибудь помочь. Я видел онлайн-ссылки для href, но я не думаю, что это сработает для меня.

Благодаря dkatzel я нашел этот инструмент Jsoup. Я попробовал онлайн-конвертацию в онлайн-Jsoup. Попробуйте, поэтому, когда я выполняю CSS Query div, я получаю требуемый вывод. Но как я могу его жестко закодировать в своей java-программе. У меня есть jsoup jar.

  • 2
    Я рекомендую вам использовать библиотеку HTML для разбора, например, jsoup.org, чтобы сделать все это за вас. (если вам не нужно разбирать его самостоятельно для школьной работы)
  • 0
    Мне не нужно разбирать это сам. Мой основной проект совершенно другой.
Показать ещё 3 комментария
Теги:
jsoup

2 ответа

1
Лучший ответ

Разве не было бы простого выражения?

\\$\\d+(?:\\.\\d+)

\\$ соответствует буквалю $.

\\d+ соответствует цифрам.

(?:\\.\\d+) соответствует потенциальным десятичным (?:\\.\\d+).

Весь матч - это то, что вы ищете, я думаю, если вам не нужен символ доллара, тогда вы можете использовать либо группу захвата, либо взять первую группу (т.е. \\$(\\d+(?:\\.\\d+))) или lookbehind (т.е. (?<=\\$)\\d+(?:\\.\\d+))

  • 0
    Я сделал List<String> price = new ArrayList<String>(); Pattern pr=Pattern.compile("\\$\\d+(?:\\.\\d+)"); Matcher priceMatcher= pr.matcher(content); while(priceMatcher.find()) { if(!price.contains(priceMatcher.group(1))) price.add(priceMatcher.group(1)); } System.out.println("Prices fetched in iteration "+count); for(String s : price) { System.out.println(s); } дает IndexOutOfBoundsException ("Нет группы" + группа);
  • 0
    @sa_nyc Используйте .group(0) так как это все совпадение.
Показать ещё 5 комментариев
3

Альтернативный ответ, в котором используется Jsoup.

Element e = doc.select("span.a-size-base").first();

Включите jsoup-1.xxjar в свой проект или при компиляции и добавьте следующий импорт.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню