Python Скрапинг комментариев fb с веб-сайта

Я пытался очистить комментарии facebook, используя Beautiful Soup, на страницах ниже.

import BeautifulSoup
import urllib2
import re

url = 'http://techcrunch.com/2012/05/15/facebook-lightbox/'

fd = urllib2.urlopen(url)

soup = BeautifulSoup.BeautifulSoup(fd)

fb_comment = soup("div", {"class":"postText"}).find(text=True)

print fb_comment

Выход представляет собой нулевой набор. Тем не менее, я ясно вижу, что комментарий facebook находится внутри этих тегов выше в элементе проверки сайта techcrunch (я немного новичок в Python, и мне было интересно, правильный ли подход и где я ошибаюсь?)


person Jay Setti    schedule 19.01.2013    source источник
comment
Эти элементы, скорее всего, созданы с помощью JavaScript и не находятся в HTML.   -  person Blender    schedule 19.01.2013
comment
Я согласен с Блендером. Вы не увидите их, не запустив JavaScript. Кроме того, вам нужно вызвать чтение на fd.   -  person Justin Peel    schedule 19.01.2013
comment
Спасибо Блендер и Джастин Пил.   -  person Jay Setti    schedule 25.01.2013


Ответы (3)


Как Кристофер и Thiefmaster: все из-за javascript.

Но если вам действительно нужна эта информация, вы все равно можете получить ее благодаря Selenium на http://seleniumhq.org, а затем использовать BeautifulSoup на этом выходе.

person Lynx-Lab    schedule 19.01.2013
comment
Спасибо за совет по Selenium, я использую Selenium и пытаюсь передать вывод Selenium в качестве входных данных для BeautifulSoup. - person Jay Setti; 25.01.2013

Комментарии Facebook загружаются динамически с использованием AJAX. Вы можете очистить исходную страницу, чтобы получить это:

<fb:comments href="http://techcrunch.com/2012/05/15/facebook-lightbox/" num_posts="25" width="630"></fb:comments>

После этого вам нужно отправить запрос к некоторому API Facebook, который даст вам комментарии для URL-адреса в этом теге.

person ThiefMaster    schedule 19.01.2013
comment
Спасибо, ребята, я просто хотел сказать, что я использовал следующий API (без необходимости запускать какой-либо JavaScript, поскольку facebook имеет очень удобный API, который напрямую извлекает сообщения) graph.facebook.com/. Это возвращает идентификатор, сообщение и отметку времени напрямую. - person Jay Setti; 03.02.2013
comment
Пожалуйста, рассмотрите возможность опубликовать это как ответ, а затем принять его. Поскольку вы отметили вопрос с помощью python, подумайте о том, чтобы поделиться некоторым кодом, если он будет полезен. - person ThiefMaster; 03.02.2013

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

Вам нужно будет использовать что-то вроде pywebkitgtk, чтобы выполнить javascript перед передачей документа в BeautifulSoup.

person Christopher Hackett    schedule 19.01.2013
comment
Это звучит как серьезное излишество. Он может просто получить доступ к любому API, к которому обычно обращается Facebook JavaScript. Нет необходимости запускать какой-либо JavaScript. - person ThiefMaster; 19.01.2013