2015-06-14 4 views
0

Я работаю с cheerio.js, чтобы сделать простой скребок. По какой-то причине он не отвечает на определенные теги html. Один div, который я не могу настроить, - div с классом 'dataTables_scrollBody' на веб-сайте, который я соскабливаю: http://www.caffeineinformer.com/the-caffeine-database.получение дополнительной информации, когда webscraping с cheerio js

Однако, я думаю, что нашел свою проблему для своей проблемы.

Я прочитал документацию https://github.com/cheeriojs/cheerio и я следую этот формат $ (селектор, [контекст], [корень].

$(".main, div:nth-child(3) ").filter(function(){ 
     var data = $(this).prev().text(); 
     console.log(data); 
}) 

В моей консоли я получаю данные, которые я желаю, но с двумя проблемы

1. Caffeine Content of Drinks All Coffee Soda Energy Drinks Tea Shots 
    Loading data.../*<![CDATA[*/var totalrows=1127; 
    var latestdate='06/12/2015';var tbldata= 

Я не вижу эту информацию на странице.

2. I am getting my data back two times. 

Я установил console.log для длины данных. Я вернулся 8 разной длины. Я считаю, что есть обходной путь. Однако я не могу понять это.

У любого есть какие-либо знания по этому вопросу?

ответ

1

DataTables - это библиотека Javascript, которая динамически создает, вставляет и изменяет элементы HTML в DOM, после страница была загружена. Таблица, которую вы хотите очистить, создается динамически, но ваш скребок работает только на статическом HTML.

Данные, которые используются для генерации таблицы, хранятся как Javascript в источнике страницы в переменной с именем tbldata (см. this gist).

два возможных решения:

  • использовать что-то вроде PhantomJS, чтобы загрузить страницу, которая будет также запускать любые JS на этой странице. После этого вы можете взять DOM и проанализировать его с помощью Cheerio;
  • очистить данные таблицы от встроенного Javascript напрямую.
+0

Спасибо, за отзыв. Я не мог понять этого. Я снял скриншоты с фантомными js. Мне нужно будет это проверить. – Winnemucca

0

Robert klep был прав, я пытался очистить таблицы данных. Я обнаружил, что хотя cheerio использует jquery, он сделал доступ к таблице данных внутри фантомных js. Я закончил работу с очень простым библиотечным узлом-phantom-simple. Узел phantom simple хорошо работает с jQuery и имеет простые, но прямые примеры.

Мне удалось потребовать узел фантомного простого, а затем запустить nodemon, чтобы сделать мою царапину.

Узел фантомного простого доступа, не требующий от пользователя вызова phantomjs в командной строке.

Смежные вопросы