Помогите очистить HTML с помощью JSoup - PullRequest
1 голос
/ 07 августа 2011

Немного новичок здесь, работающий над личным проектом по сбору предложений по моим школьным курсам в легко читаемый табличный формат, но у меня возникли проблемы с начальным этапом очистки данных с сайта.

Я только что добавил библиотеку JSoup в свой проект в eclipse, и теперь у меня возникают проблемы с инициализацией соединения при использовании документации для Jsoup.

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

<td class='CourseNum'><img src='images/minus.gif' class='ICS3330 SW' onclick="toggledetails('CS3330')

Моим первым предположением было получить getElementsByTag (td), а затем запросить эти элементы для параметра onclick = или значения параметра 'class',очистить его, удалив начальное «I» и суффикс «SW», оставив после себя имя «CS3330».

Теперь перейдем к фактической реализации:

Document doc = Jsoup.parse("UTF-8", "http://rabi.phys.virginia.edu/mySIS/CS2/page.php?Semester=1118&Type=Group&Group=CompSci").get();
Elements td = doc.getElementsByTag("td");

На этом этапеЯ уже сталкиваюсь с проблемами (хотя я не отклоняюсь далеко от примеров, приведенных в документации) и был бы признателен за некоторые рекомендации о том, как заставить мой код работать!

edit: GOT IT!Спасибо всем!

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

Согласно документации вы должны делать:

Document doc = Jsoup.connect(url).get();

Метод parse() предназначен для файлов.

1 голос
/ 08 августа 2011

Я только что скачал JSoup и опробовал его на веб-сайте вашей школы и получил такой вывод:

Unit: Computer Science
   CS 1010: Introduction to Information Technology
   CS 1110: Introduction to Programming
   CS 1111: Introduction to Programming
   CS 1112: Introduction to Programming
   CS 1120: From Ada and Euclid to Quantum Computing and the World Wide Web
   CS 2102: Discrete Mathematics I
   CS 2110: Software Development Methods
   CS 2150: Program and Data Representation
   CS 2220: Engineering Software
   CS 2330: Digital Logic Design
   CS 2501: Special Topics in Computer Science
   CS 3102: Theory of Computation
   CS 3330: Computer Architecture
   CS 4102: Algorithms
   CS 4240: Principles of Software Design
   CS 4414: Operating Systems
   CS 4444: Introduction to Parallel Computing
   CS 4457: Computer Networks
   CS 4501: Special Topics in Computer Science
   CS 4753: Electronic Commerce Technologies
   CS 4810: Introduction to Computer Graphics
   CS 4993: Independent Study
   CS 4998: Distinguished BA Majors Research
   CS 6161: Design and Analysis of Algorithms
   CS 6190: Computer Science Perspectives
   CS 6354: Computer Architecture
   CS 6444: Introduction to Parallel Computing
   CS 6501: Special Topics in Computer Science
   CS 6610: Programming Languages
   CS 7457: Computer Networks
   CS 7993: Independent Study
   CS 7995: Supervised Project Research
   CS 8501: Special Topics in Computer Science
   CS 8524: Topics in Software Engineering
   CS 8897: Graduate Teaching Instruction
   CS 8999: Thesis
   CS 9999: Dissertation

Слишком круто! Влад прав, хотя; используйте метод connect (...). 1+ до Влада

Другие предложения и подсказки:
Вот те константы, которые я использовал в своей маленькой программе:

   private static final String URL = "http://rabi.phys.virginia.edu/mySIS/CS2/" +
        "page.php?Semester=1118&Type=Group&Group=CompSci";
   private static final String TD_TAG = "td";
   private static final String CLASS_ATTRIB = "class";
   private static final String CLASS_ATTRIB_UNIT_NAME = "UnitName";
   private static final String CLASS_ATTRIB_COURSE_NUM = "CourseNum";
   private static final String CLASS_ATTRIB_COURSE_NAME = "CourseName";

И вот переменные, которые я использовал в методе очистки:

     String unitName = "";
     List<String> courseNumbNameList = new ArrayList<String>();
     String courseNumbName = "";

Редактировать 1
Основываясь на ваших последних комментариях, я думаю, что вы немного обдумываете вещи. Для меня хорошо работает этот простой алгоритм:

  • Создайте 3 переменные, которые я перечислил выше
  • Получите мой документ в соответствии с рекомендациями Влада.
  • Создайте переменную td Elements и назначьте ей все элементы, имеющие тег td.
  • Используйте цикл for с int i, идущим от 0 до
  • Внутри цикла проверьте атрибут класса элемента.
  • Если атрибут String равен строке CLASS_ATTRIB_UNIT_NAME (см. Выше), получите текст элемента и используйте его для установки переменной unitName.
  • Если атрибут String равен CLASS_ATTRIB_COURSE_NUM, установите courseNumbName в текст элемента.
  • Если атрибут String равен CLASS_ATTRIB_COURSE_NAME, добавьте текст элемента к строке courseNumbName, добавьте строку в список массивов и установите courseNumbName = в "".
...