Zastanawiam się nad wypróbowaniem Beautiful Soup , pakietu Pythona do skrobania HTML. Czy są jeszcze jakieś pakiety do zgarniania HTML, na które powinienem spojrzeć? Python nie jest wymagany, tak naprawdę jestem zainteresowany słuchaniem także o innych językach.
Dotychczasowe dzieje:
- Pyton
- Rubin
- .NETTO
- Perl
- Jawa
- JavaScript
- PHP
- Większość z nich
XPathExpression
można użyć własnego języka Java (który istnieje od wersji Java 1.5)Odpowiedzi:
Świat Ruby, odpowiadający Pięknej Zupie, to dlaczego Hpricot_lucky_stiffa .
źródło
W świecie .NET polecam HTML Agility Pack. Nie jest tak prosty jak niektóre z powyższych opcji (jak HTMLSQL), ale jest bardzo elastyczny. Pozwala maniuplować źle sformatowany HTML, tak jakby był dobrze sformatowanym XML, dzięki czemu można używać XPATH lub po prostu itereować na węzłach.
http://www.codeplex.com/htmlagilitypack
źródło
BeautifulSoup to świetny sposób na skrobanie HTML. Moja poprzednia praca wymagała ode mnie dużo skrobania i chciałbym wiedzieć o BeautifulSoup, kiedy zaczynałem. To jest jak DOM z dużo bardziej użytecznymi opcjami i jest o wiele bardziej pythoniczny. Jeśli chcesz wypróbować Ruby, przenieśli BeautifulSoup, nazywając ją RubyfulSoup, ale od jakiegoś czasu nie była aktualizowana.
Inne przydatne narzędzia to HTMLParser lub sgmllib.SGMLParser, które są częścią standardowej biblioteki Pythona. Działają one poprzez wywoływanie metod za każdym razem, gdy wprowadzasz / opuszczasz tag i napotykasz tekst HTML. Są jak Expat, jeśli znasz to. Te biblioteki są szczególnie przydatne, jeśli zamierzasz analizować bardzo duże pliki, a utworzenie drzewa DOM byłoby długie i kosztowne.
Wyrażenia regularne nie są zbyt potrzebne. BeautifulSoup obsługuje wyrażenia regularne, więc jeśli potrzebujesz ich mocy, możesz z niej skorzystać. Mówię, że idź z BeautifulSoup, chyba że potrzebujesz prędkości i mniejszej pojemności pamięci. Jeśli znajdziesz lepszy parser HTML w Pythonie, daj mi znać.
źródło
Odkryłem, że HTMLSQL jest śmiesznie prostym sposobem na screencrape. Uzyskanie wyników zajmuje dosłownie kilka minut.
Zapytania są bardzo intuicyjne - jak:
Istnieją teraz inne alternatywy, które przyjmują to samo podejście.
źródło
Biblioteka lxml Pythona działa jak powiązanie Pythonic dla bibliotek libxml2 i libxslt. Szczególnie podoba mi się obsługa XPath i ładne drukowanie struktury XML w pamięci. Obsługuje także parsowanie uszkodzonego HTML. I nie sądzę, że można znaleźć inne biblioteki / wiązania Pythona, które analizują XML szybciej niż lxml.
źródło
Dla Perla jest WWW :: Mechanize.
źródło
Python ma kilka opcji skrobania HTML oprócz Beatiful Soup. Oto kilka innych:
WWW:Mechanize
. Daje obiekt typu przeglądarka, który nie ma wpływu na strony internetowelibwww
. Obsługuje różne opcje przechodzenia i wyboru elementów (np. Wybór XPath i CSS)źródło
„Prosty parser DOM HTML” jest dobrą opcją dla PHP, jeśli znasz się na selektorach jQuery lub JavaScript, to znajdziesz się w domu.
Znajdź tutaj
Jest tu także post na blogu.
źródło
Dlaczego nikt jeszcze nie wspomniał o JSOUP dla Javy? http://jsoup.org/
źródło
Narzędzie do tworzenia szablonów autorstwa Adriana Holovaty (znanego z Django ) stosuje bardzo interesujące podejście: podajesz odmiany tej samej strony i „uczy się”, gdzie znajdują się „dziury” dla zmiennych danych. Nie jest on specyficzny dla HTML, więc dobrze byłoby też zeskrobać dowolną inną treść w postaci zwykłego tekstu. Użyłem go również do plików PDF i HTML przekonwertowanych na zwykły tekst (odpowiednio z pdftotext i lynx).
źródło
Znam i kocham skrobaczkę do ekranu .
Screen-Scraper to narzędzie do wydobywania danych ze stron internetowych. Screen Scraper automatyzuje:
Typowe zastosowania:
Techniczny:
Trzy edycje skrobaczki do ekranu:
źródło
Najpierw dowiem się, czy dane witryny zawierają serwer API lub kanały RSS umożliwiające dostęp do potrzebnych danych.
źródło
Przepełnienie stosu zgarniającego jest szczególnie łatwe w przypadku Butów i Hpricot .
źródło
Inną opcją dla Perla byłby Web :: Scraper oparty na Ruby's Scrapi . W skrócie, dzięki ładnej i zwięzłej składni, możesz uzyskać solidny skrobak bezpośrednio do struktur danych.
źródło
Odniosłem pewien sukces z HtmlUnit w Javie. Jest to prosta platforma do pisania testów jednostkowych w interfejsie sieciowym, ale równie przydatna do skrobania HTML.
źródło
Wieśniak! Język zapytań lub YQL mogą być używane razem z jQuery, AJAX, JSONP do ekranowania stron internetowych
źródło
Kolejnym narzędziem dla .NET jest MhtBuilder
źródło
Jest też takie rozwiązanie: netty HttpClient
źródło
Używam Hpricot na Ruby. Jako przykład jest to fragment kodu, którego używam do pobierania wszystkich tytułów książek z sześciu stron mojego konta HireThings (ponieważ nie zawierają one ani jednej strony z tymi informacjami):
Jest prawie kompletny. Wszystko, co następuje wcześniej, to import biblioteki i ustawienia mojego serwera proxy.
źródło
Często używałem Pięknej Zupy z Pythonem. Jest to znacznie lepsze niż sprawdzanie wyrażeń regularnych, ponieważ działa jak używanie DOM , nawet jeśli HTML jest źle sformatowany. Możesz szybko znaleźć tagi HTML i tekst z prostszą składnią niż wyrażenia regularne. Po znalezieniu elementu można iterować nad nim i jego elementami potomnymi, co jest bardziej przydatne do zrozumienia zawartości w kodzie niż w przypadku wyrażeń regularnych. Chciałbym, żeby Piękna Zupa istniała wiele lat temu, kiedy musiałem robić dużo screenscrapingu - zaoszczędziłoby mi to dużo czasu i bólu głowy, ponieważ struktura HTML była tak słaba, zanim ludzie zaczęli ją sprawdzać.
źródło
Mimo że został zaprojektowany do testowania sieci .NET , do tego celu korzystam z frameworka WatiN . Ponieważ jest oparty na DOM, bardzo łatwo jest przechwytywać HTML, tekst lub obrazy. Ostatnio użyłem go do zrzucenia listy linków z zapytania o przestrzeń nazw MediaWiki Wszystkie strony do arkusza kalkulacyjnego Excel. Poniższy fragment kodu VB.NET jest dość prymitywny, ale działa.
źródło
Implementacje algorytmu parsowania HTML5 : html5lib (Python, Ruby), Validator.nu HTML Parser (Java, JavaScript; C ++ w fazie rozwoju), Hubbub (C), Twintsam (C #; nadchodzące).
źródło
Byłbyś głupcem, gdybyś nie używał Perla ... Nadchodzą płomienie ...
Postaw na następujące moduły i ginsu zeskrobuj.
źródło
Użyłem LWP i HTML :: TreeBuilder z Perlem i uważam je za bardzo przydatne.
LWP (skrót od libwww-perl) pozwala łączyć się ze stronami internetowymi i zdrapać HTML, możesz pobrać moduł tutaj, a książka O'Reilly wydaje się być tutaj online .
TreeBuilder pozwala zbudować drzewo z HTML, a dokumentacja i źródło są dostępne w HTML :: TreeBuilder - Parser, który buduje drzewo składniowe HTML .
Jednak może być jeszcze zbyt dużo ćwiczeń, aby zrobić coś takiego. Nie spojrzałem na moduł Mechanizacji sugerowany przez inną odpowiedź, więc mogę to zrobić.
źródło
W Javie możesz używać TagSoup .
źródło
Cóż, jeśli chcesz to zrobić po stronie klienta przy użyciu tylko przeglądarki, masz jcrawl.com . Po zaprojektowaniu usługi złomowania z aplikacji internetowej ( http://www.jcrawl.com/app.html ) wystarczy dodać wygenerowany skrypt do strony HTML, aby rozpocząć używanie / prezentowanie danych.
Cała logika złomowania odbywa się w przeglądarce za pomocą JavaScript. Mam nadzieję, że uznasz to za przydatne. Kliknij ten link, aby zobaczyć przykład na żywo, który wyciąga najnowsze wiadomości z tenisa Yahoo .
źródło
Prawdopodobnie masz już tyle, ale myślę, że to właśnie próbujesz zrobić:
źródło
Miałem mieszane wyniki w .NET przy użyciu SgmlReader, który został pierwotnie uruchomiony przez Chrisa Lovetta i wydaje się być zaktualizowany przez MindTouch .
źródło
Podoba mi się funkcja ImportXML (URL, XPath) w arkuszach kalkulacyjnych Google.
Powtórzy komórki w dół kolumny, jeśli wyrażenie XPath zwróci więcej niż jedną wartość.
W
importxml()
jednym arkuszu kalkulacyjnym możesz mieć do 50 funkcji.Wtyczka internetowa RapidMiner jest również bardzo łatwa w użyciu. Może robić posty, akceptuje pliki cookie i może ustawić klienta użytkownika .
źródło
Odniosłem również duży sukces, używając Jaxer + jQuery Aptany do parsowania stron. Z natury nie jest tak szybki ani podobny do skryptu, ale selektory jQuery + prawdziwy JavaScript / DOM to ratownik na bardziej skomplikowanych (lub zniekształconych) stronach.
źródło