2010-07-21 8 views
7

Chciałbym powielić funkcje, które wykorzystuje Facebook, aby przeanalizować łącze. Kiedy przesyłasz link do swojego statusu na Facebooku, ich system wychodzi i pobiera sugerowaną title, summary i często jedną lub więcej odpowiednich image s z tej strony, z której możesz wybrać miniaturkę.Pobieranie streszczeń łącza podobnego do Facebooka (tytuł, podsumowanie, odpowiednie obrazy) przy użyciu Pythona

Moja aplikacja musi to zrobić za pomocą Pythona, ale jestem otwarty na wszelkiego rodzaju poradniki, posty na blogu lub doświadczenia innych programistów, które się z tym wiążą i mogą mi pomóc dowiedzieć się, jak to osiągnąć. .

naprawdę chciałbym się nauczyć z doświadczeń innych ludzi przed tylko skoki w

Żeby było jasne, gdy dany adres URL strony internetowej, chcę być w stanie odzyskać:

  1. Tytuł: Prawdopodobnie tylko tag <title>, ale prawdopodobnie <h1>, nie jestem pewien.
  2. Jedno-podsumowanie podsumowania strony.
  3. Kilka odpowiednich obrazów, które mogłyby zostać użyte jako miniatura. (Najtrudniejsze jest odfiltrowanie zbędnych obrazów takich jak banery lub zaokrąglonymi rogami)

może trzeba zaimplementować to sam, ale ja przynajmniej chcą wiedzieć o tym, jak inni ludzie robili tego rodzaju zadań.

Odpowiedz

2

BeautifulSoup jest dobrze przystosowany do realizacji większości z tego.

Zasadniczo wystarczy zainicjować obiektu soup, a następnie zrobić coś jak następuje wydobyć to, co Cię interesuje:

title = soup.findAll('title') 
images = soup.findAll('img') 

Następnie można pobrać każdy z obrazów na podstawie ich url użyciu urllib2.

Tytuł jest dość prosty, ale zdjęcia mogą być nieco trudniejsze, ponieważ trzeba je pobrać, aby uzyskać odpowiednie statystyki. Być może możesz odfiltrować większość obrazów w oparciu o rozmiar i liczbę kolorów? Zaokrąglone rogi, jako przykład, będą małe i mają zazwyczaj tylko 1-2 kolory.

Co do podsumowania stron, które mogą być nieco trudniejsze, ale robiłem coś takiego:

  1. używam BeautifulSoup usunąć wszystkie bloki styl, scenariusz, forma, i głowę z html za pomocą: .findAll, a następnie .extract.
  2. łapię pozostały tekst używając: .join(soup.findAll(text = True))

W aplikacji, być może można użyć tego "text" zawartość jako podsumowania strony?

Mam nadzieję, że to pomoże.

+3

BeautifulSoup nie jest dobrze obsługiwany w Pythonie 3.1, a jego oryginalny autor nie robi już wiele rozwoju. Prawdopodobnie lepiej użyj lxml.html i/lub html5lib (ten drugi jest polecany przez autora BeautifulSoup). – lunaryorn

+0

Dobrze wiedzieć, aby móc z niego skorzystać w przyszłości. Dzięki! –

1

Oto kompletne rozwiązanie: https://github.com/svven/summary

>>> import summary 
>>> s = summary.Summary('http://stackoverflow.com/users/76701/ram-rachum') 
>>> s.extract() 
>>> s.title 
u'User Ram Rachum - Stack Overflow' 
>>> s.description 
u'Israeli Python hacker.' 
>>> s.image 
https://www.gravatar.com/avatar/d24c45635a5171615a7cdb936f36daad?s=128&d=identic 
on&r=PG 
>>> 
+0

Ten projekt niestety nie obsługuje języka Python 3. – illagrenan

+0

@agaragrenan PRs są mile widziane – ducu

Powiązane problemy