Web scraping - jak rozpoznać główne treści na stronie internetowej

Biorąc pod uwagę stronę artykułu wiadomości (z dowolnego głównego źródła wiadomości, takich jak times lub bloomberg), chcę zidentyfikować główną treść artykułu na tej stronie i wyrzucić inne elementy różne, takie jak reklamy, menu, paski boczne, komentarze użytkowników.

Jaki jest ogólny sposób działania, który będzie działał na większości głównych serwisów informacyjnych?

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

Author: Anony-Mousse, 2011-01-12

9 answers

Nie ma na to gwarancji, że to zadziała, ale jedną ze strategii, której możesz użyć, jest znalezienie elementu z najbardziej widocznym tekstem w środku.

 6
Author: Amber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 17:49:26

Istnieje wiele sposobów, aby to zrobić, ale żaden nie zawsze będzie działać. Oto dwa najłatwiejsze:

  • jeśli jest to znany skończony zbiór stron internetowych: w skrobaku przekonwertuj każdy adres url z normalnego adresu url na adres URL wydruku dla danej witryny (tak naprawdę nie może być uogólniony w różnych witrynach)
  • Użyj algorytmu odczytu arc90 (implementacja odniesienia jest w javascript) http://code.google.com/p/arc90labs-readability / . Skróconą wersją tego algorytmu jest szukanie div z tagami p wewnątrz nich. To nie będzie działać na niektórych stronach internetowych, ale ogólnie jest całkiem dobry.
 28
Author: gte525u,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 18:14:30

Diffbot oferuje darmowe (10.000 adresów URL) API, aby to zrobić, Nie wiem, czy to podejście jest tym, czego szukasz, ale może komuś pomóc http://www.diffbot.com/

 8
Author: JordanBelf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-30 17:57:39

Jakiś czas temu napisałem prosty skrypt Pythona do tego zadania. Używa heurystyki do grupowania bloków tekstowych w oparciu o ich głębokość w DOM. Grupa z największą ilością tekstu jest wtedy zakładana jako główna treść. Nie jest idealny, ale działa ogólnie dobrze na serwisach informacyjnych, gdzie artykuł jest na ogół największą grupą tekstu, nawet jeśli jest podzielony na wiele tagów div/P.

Użyłbyś skryptu w stylu: python webarticle2text.py <url>

 8
Author: Cerin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-09 13:54:09

Dla rozwiązania w Javie spójrz na https://code.google.com/p/boilerpipe/ :

Biblioteka boilerpipe zapewnia algorytmy do wykrywania i usuwania nadmiaru "bałaganu" (płyty, szablony) wokół głównej zawartości tekstowej strony internetowej.

Biblioteka dostarcza już konkretne strategie dla typowych zadań (na przykład: ekstrakcja wiadomości), a także może być łatwo rozszerzona o indywidualne ustawienia problemów.

Ale jest też python wrapper around this dostępny tutaj:

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

 7
Author: asmaier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-20 12:13:42

Może być bardziej przydatne wyodrębnić kanały RSS (<link type="application/rss+xml" href="..."/>) Na tej stronie i przeanalizować dane w kanale, aby uzyskać główną zawartość.

 4
Author: nedk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 17:54:39

Inną możliwością oddzielenia "rzeczywistej" zawartości od szumu jest pomiar gęstości HTML części strony HTML.

Będziesz potrzebował trochę eksperymentowania 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: właśnie dowiedziałem się, że powyższy URL nie działa w tej chwili; Oto alternatywny link do buforowanej wersji archive.org.

 3
Author: PhilS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 21:50:32

Sprawdź następujący skrypt. To jest naprawdę niesamowite:

from newspaper import Article
URL = "https://www.ksat.com/money/philippines-stops-sending-workers-to-qatar"
article = Article(URL)
article.download()
print(article.html)
article.parse()
print(article.authors)
print(article.publish_date)
#print(article.text)
print(article.top_image)
print(article.movies)
article.nlp()
print(article.keywords)
print(article.summary)

Więcej dokumentacji można znaleźć na stronie http://newspaper.readthedocs.io/en/latest/ i https://github.com/codelucas/newspaper powinieneś zainstalować go używając:

pip3 install newspaper3k
 1
Author: Mona Jalal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-01 19:29:10

Nie próbowałbym zeskrobać go ze strony internetowej - zbyt wiele rzeczy mogłoby go zepsuć - ale zamiast tego sprawdź, które strony internetowe publikują kanały RSS. Na przykład kanał RSS The Guardian zawiera większość tekstu z wiodących artykułów:

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

Nie wiem, czy The Times (The London Times, nie NY) ma taki, bo jest za paywall. Powodzenia...

 0
Author: Spacedman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 17:55:25