2015-04-17 2 views
7

Я пытаюсь очистить Instagram (построенный с помощью React) с помощью Node.js/Cheerio. Отладка документа показывает возвращаемый объект, но он не похож на типичный ответ.Можно ли очистить сайт React (Instagram) с Cheerio?

Я предполагаю, что это связано с реакцией. Есть ли способ обойти это и вытащить предоставленную DOM для синтаксического анализа с Cheerio? Или я чего-то не хватает?

Заранее спасибо.

+0

Нет кода, нет точного сообщения об ошибке, не точные шаги, чтобы воспроизвести, я предполагаю, что вы пропали без вести [как к спрашивать] (http://stackoverflow.com/help/how-to- просить). Конечно, с клавиатурой и отладчиком вы можете очистить даже веб-сайт, созданный с помощью 'React' с' Cheerio'. Но вам может понадобиться какой-то более сильный инструмент, такой как 'PhantomJS' или' SeleniumHQ', способный запускать скрипты, дожидаться их исполнения и т. Д. – xmojmr

+3

Это концептуальный вопрос с двоичным ответом - спасибо за то, что он бесполезен. –

+0

Уважаемый @Kyle, полезность основана на мнениях. Я верю, что ваш вопрос недостаточно хорош, и вы можете его улучшить. Я не вижу «концепции» в вашем вопросе. Бинарный ответ «да», это возможно. Но что вы имеете в виду, отлаживая документ? Какой документ? Что такое сообщение об ошибке? jsFiddle для воспроизведения? – xmojmr

ответ

7

В общем случае - если веб-сайт является дружественным к SEO, вы можете сделать это путем подмены строки пользовательского агента искателя веб-страниц. Это возвращает рендер DOM, который может быть проанализирован Cheerio.

В конкретном случае - Instagram возвращает рендер DOM на своих мобильных веб-сайтах. Объедините строку пользовательского агента мобильного телефона, и вы можете проанализировать возвращаемые данные.

 var options = { 
     url: user.instagram_url, 
     headers: { 
      'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4' 
     } 
     }; 

     request(options, function(error, response, html) { 
     if (!error) { 

      console.log('Scraper running on Instagram user page.'); 

      // Use Cheerio to load the page. 
      var $ = cheerio.load(html); 

      // Code to parse the DOM here 

     } 
     } 
+0

Можете ли вы объяснить «_virtual DOM, представленный на мобильном веб-сайте, который не обрабатывается Cheerio_»? Некоторая гиперссылка «см. Также» или какой-то образец «html» snippet, возвращаемый из запроса _unspoofed_? Что-то, что кто-то еще может понять, какую проблему вы нашли и решили? Я знаю, что такое instagram, node.js, cheerio, html, css, javascript, объектная модель документа, поисковая оптимизация и другие вещи, но мне все же трудно понять, что вы видите при просмотре экрана вашего компьютера ... – xmojmr

+0

@Kyle: Я не могу найти мобильный сайт, который можно открыть на моем рабочем столе для Instagram. пожалуйста, дайте ссылку, если у вас есть. Спасибо . –

+0

Вы должны изменить строку своего пользовательского агента. Вы можете сделать это с помощью эмуляции браузера Chrome или в настройках Cheerio, как я это сделал выше. –

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