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

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

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

Спасибо!


person Ceasar Bautista    schedule 26.05.2011    source источник
comment
в основном просто реализовать некоторые эвристики — это простое утверждение, описывающее сложную задачу. Хотя это может быть интересным академическим упражнением, я бы предположил, что написание модульного поискового робота и внедрение собственного парсера для каждого сайта было бы проще, проще и точнее.   -  person Rob Cowie    schedule 26.05.2011
comment
-1 задавайте более целенаправленные вопросы.   -  person Steven Rumbalski    schedule 26.05.2011
comment
Если вы хотите попробовать, придерживайтесь chanize, lxml и взгляните на nltk.org для обработки текста.   -  person Rob Cowie    schedule 26.05.2011
comment
На странице любого конкретного продукта Amazon перечисляет несколько продуктов, которые также могут вас заинтересовать. Как узнать, к какому продукту, показанному на странице, относятся отзывы? Вы не можете сделать скребок общего назначения для этого.   -  person Steven Rumbalski    schedule 26.05.2011
comment
Спасибо, Роб. Я только что читал о компаниях, которые утверждают, что у них есть миллионы источников, и я предположил, что у них должны быть какие-то очень общие скребки, выполняющие большую часть их работы. И извини, Стив, но я, честно говоря, даже не знаю, с чего начать. Гугл ничего полезного не выдает.   -  person Ceasar Bautista    schedule 26.05.2011
comment
@Ceasar Взгляните на scrapy.org. Это модульная структура очистки.   -  person Rob Cowie    schedule 26.05.2011
comment
Понятно. Спасибо за информацию.   -  person Ceasar Bautista    schedule 26.05.2011


Ответы (3)


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

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

Два полезных проекта, на которые стоит обратить внимание, — это Scrapy, фреймворк для парсинга веб-страниц на Python, и http://www.nltk.org/, Естественный Language Toolkit, большая коллекция модулей Python, связанных с обработкой текста на естественном языке.

person Rob Cowie    schedule 26.05.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>

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

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

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

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

person Rob Raisch    schedule 03.06.2011

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

person Amos Newcombe    schedule 27.05.2011