2011-01-12 16 views
38

Biorąc pod uwagę stronę z artykułem prasowym (z dowolnego ważnego źródła wiadomości, takiego jak czas lub bloomberg), chcę zidentyfikować główną treść artykułu na tej stronie i wyrzucić pozostałe elementy misc takie jak reklamy, menu, paski boczne, komentarze użytkowników.Skrobanie przez Internet - jak zidentyfikować główną treść na stronie internetowej

Co to jest ogólny sposób, który będzie działał w większości ważnych witryn informacyjnych?

Jakie są dobre narzędzia lub biblioteki do eksploracji danych? (najlepiej na podstawie Pythona)

+5

zobaczyć jak 'Readability' zakładka jest realizowany http://lab.arc90.com/experiments/readability/ – jfs

+0

Przeglądarka, która to zrobi, stanowiłaby ogromne zagrożenie dla reklam online. –

+2

kod do oryginalnej bookmarklet znajduje się tutaj: http://code.google.com/p/arc90labs-readability/source/browse/ 'Czytelność' jest teraz usługą i jej kod jest niedostępny. – lsh

Odpowiedz

4

Nie można tego zrobić, ale gwarantujemy, że będzie działać, ale jedną z możliwych strategii jest znalezienie elementu z najbardziej widocznym tekstem w środku.

4

Może być bardziej przydatne wyodrębnienie kanałów RSS (<link type="application/rss+xml" href="..."/>) na tej stronie i przeanalizowanie danych w kanale, aby uzyskać główną treść.

+0

NB: dla kanałów ATOM "type =" application/atom + xml "' – nedk

+0

Dobry pomysł, ale można go pominąć, ponieważ wiele kanałów zawiera tylko podsumowanie artykułu. Co jest zrozumiałe, ponieważ celem większości witryn z wiadomościami jest umożliwienie wyświetlania reklam, które zazwyczaj nie są dostępne w czytniku RSS. – Cerin

0

Nie próbowałbym zeskrobać go ze strony internetowej - zbyt wiele rzeczy może zepsuć - ale zamiast tego zobacz, które strony internetowe publikują kanały RSS. Na przykład, RSS tego Guardian posiada większość tekstu z ich czołowych artykułów:

http://feeds.guardian.co.uk/theguardian/rss

ja nie wiem, czy The Times (London Times, nie NY) ma jeden, bo to za paywall. Powodzenia z tym ...

+0

Większość kanałów RSS, które widziałem, zawiera tylko krótkie streszczenia pełnych artykułów. – kefeizhou

27

Istnieje wiele sposobów, aby to zrobić, ale żaden z nich nigdy nie zadziała. Oto dwa najłatwiejsze:

  • czy jest to znany skończony zbiór stron internetowych: w skrobak przekonwertować każdy adres URL od zwykłego URL do adresu URL drukowania dla danego miejsca (naprawdę nie można uogólnić w witrynach)
  • Użyj algorytmu czytelności arc90 (implementacja referencyjna jest w javascript) http://code.google.com/p/arc90labs-readability/. Krótka wersja tego algorytmu polega na wyszukiwaniu elementów div zawierających znaczniki p. Nie będzie działać na niektórych stronach internetowych, ale generalnie jest całkiem niezły.
+3

+1 dla czytelności. Ponieważ Czytelność działa najlepiej na stronach artykułów, a nie na stronach głównych, najlepiej by było, gdyby kanał RSS był analizowany pod kątem adresów URL artykułów. – nedk

+1

Powinienem dodaliśmy linki do portów Pythona algorytmu czytelności: http://github.com/search?type=Repositories&language=python&q=readability&repo=&langOverride=&x=22&y=9&start_value=1 – gte525u

+0

Zastanawiam się, dlaczego nie zrobił” • odkryj to już wcześniej. To było wspaniałe, w porównaniu do poprzednich metod, które sam opracowałem. – Pankaj

3

Inną możliwością oddzielenia "prawdziwej" treści od szumu jest measuring HTML density części strony HTML.

Będziesz potrzebował trochę eksperymentów z progami, aby wyodrębnić "prawdziwą" treść, i myślę, że możesz poprawić algorytm, stosując heurystykę, aby określić dokładne granice segmentu HTML po zidentyfikowaniu interesującej treści.

Aktualizacja: Dowiedziałem się, że powyższy URL nie działa teraz; here is an alternative link do buforowanej wersji archive.org.

8

Jakiś czas temu napisałem dla tego zadania simple Python script. Używa heurystyki do grupowania bloków tekstu w oparciu o ich głębokość w DOM. Grupa z największą ilością tekstu jest wtedy uważana za główną treść. Nie jest doskonały, ale działa dobrze na stronach z wiadomościami, gdzie artykuł jest ogólnie największą grupą tekstu, nawet jeśli jest podzielony na wiele tagów div/p.

Można by użyć skryptu jak: python webarticle2text.py <url>

+0

link już nie działa –

+0

@ MPękalski, Dzięki za poinformowanie mnie. Zaktualizowałem link. – Cerin

8

Diffbot oferuje darmowe (10.000 adresy) API do zrobienia, że ​​nie wiem, czy to podejście jest to, czego szukasz, ale może komuś pomóc http://www.diffbot.com/

+0

Fajnie, od jakiegoś czasu zastanawiałem się nad zbudowaniem czegoś takiego samemu =) –

6

Do roztworu w Javie spojrzeć https://code.google.com/p/boilerpipe/:

Biblioteka bojlerów dostarcza algorytmy do wykrywania i usuwania nadmiarowego "bałaganu" (szablon, szablony) wokół głównej treści tekstowej strony internetowej.

Biblioteka zapewnia już konkretne strategie dla typowych zadań (na przykład aktualności ekstrakcji artykułu), a także może być łatwo rozszerzony do indywidualnych ustawień problemowych.

Ale jest też otoki Python wokół tego dostępne tu:

https://github.com/misja/python-boilerpipe