Как создать сканер, который может извлекать определенную информацию с любого сайта? - PullRequest
4 голосов
/ 26 мая 2011

Поэтому я пытаюсь создать веб-сканер, который мог бы включить любой обзорный сайт и сделать так, чтобы он достаточно надежно вычеркивал отзывы пользователей из текста. То есть вместо того, чтобы строить скребок для Amazon и Overstocked, я просто хочу один скребок, который мог бы соскрести отзывы о продукте с обеих сторон, даже если бы он жертвовал точностью. Я кратко поговорил с одним из моих профессоров, и он упомянул, что я мог бы просто реализовать некоторую эвристику и собрать из нее данные (в качестве базового примера просто взять весь текст в тегах p). На данный момент я просто ищу совет, в каком направлении идти.

(Если это имеет какое-либо значение, в настоящее время я использую mechanize и lxml (Python) для сканирования отдельных сайтов.)

Спасибо!

Ответы [ 3 ]

4 голосов
/ 26 мая 2011

На самом деле нет «ответа» на этот вопрос, но в интересах любого, кто сталкивался с этим вопросом:

Концепция «универсального» скребка - в лучшем случае - интересное академическое упражнение,Это вряд ли будет возможно каким-либо полезным способом.

Два полезных проекта, на которые стоит обратить внимание: Scrapy , фреймворк Python Web Scrabing и http://www.nltk.org/, NaturalLanguage Toolkit , большая коллекция модулей Python, относящихся к обработке текста на естественном языке.

3 голосов
/ 03 июня 2011

В свое время (около 1993 года) я написал паука для извлечения целевого контента из множества сайтов, которые использовали набор «правил», определенных для каждого сайта.

Правила были выражены в виде регулярных выражений и классифицировались как правила «подготовки» (те, которые массируют извлеченные страницы для лучшей идентификации / изоляции извлекаемых данных), так и правила «извлечения» (те, которые вызывали извлечение полезных данных.)

Так, например, с учетом страницы:

<html>
  <head><title>A Page</title></head>
  <body>
  <!-- Other stuff here -->
  <div class="main">
    <ul>
      <li>Datum 1</li>
      <li>Datum 2</li>
    </ul>
  </div>
  <!-- Other stuff here -->
  <div>
    <ul>
      <li>Extraneous 1</li>
      <li>Extraneous 2</li>
    </ul>
  </div>
  <!-- Other stuff here -->
  </body>
</html>

Правила извлечения только значений 'Datum' могут быть следующими:

  1. вырезать начальную часть, используя'^.*?<div class="main">'
  2. полосная задняя часть с использованием '</div>.+</html>$'
  3. извлечение в результат с использованием '<li>([^<]+)</li>'

Это работало хорошо для большинства сайтов, пока они не изменили свой макет,в этот момент правила для этого сайта потребовали корректировки.

Сегодня я, вероятно, сделал бы то же самое, используя HTMLTidy Дэйва Раггетта для нормализации всех найденных страниц в допустимые XHTML и XPATH / XSLT дляпомассируйте страницу в правильном формате.

0 голосов
/ 27 мая 2011

Имеется словарь RDF для обзоров , а также микроформат . Если ваши обзоры в этом формате, их будет легко разобрать.

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